링크 된 엔터티에 필터 조건을 추가하려면 어떻게해야합니까 (이 경우 전자 메일)? 중복 행을 제공하는 링크 조건에 필터 조건을 추가했습니다.Dynamics CRM 2011 LinkEntities 왼쪽 가입 문제
동일한 sql 쿼리는 다음과 같아야합니다.
select distinct OpportunityId
from Opportunity o
left join Email e on e.RegardingObjectId = o.OpportunityId
where o.StateCode = 1 and o.StatusCode = 3
and e.RegardingObjectId is null
그러나 QueryExpression
클래스는 다음과 같이 수행합니다.
select distinct opportunityid
from Opportunity o
left join Email e
on e.RegardingObjectId = o.OpportunityId
and e.RegardingObjectId is null
where o.StateCode = 1 and o.StatusCode = 3
코드 :
ClientCredentials Credentials = new ClientCredentials();
Credentials.Windows.ClientCredential
= System.Net.CredentialCache.DefaultNetworkCredentials;
Uri OrganizationUri = ""
Uri HomeRealmUri = null;
OrganizationServiceProxy orgService
= new OrganizationServiceProxy(OrganizationUri, HomeRealmUri, Credentials, null);
IOrganizationService _service = (IOrganizationService)orgService;
QueryExpression query = new QueryExpression();
query.Distinct = true;
query.EntityName = "opportunity";
query.ColumnSet = new ColumnSet(true);
FilterExpression filter1 = new FilterExpression();
filter1.FilterOperator = LogicalOperator.And;
filter1.AddCondition("statuscode", ConditionOperator.Equal,3);
filter1.AddCondition("statecode", ConditionOperator.Equal, 1);
query.Criteria = filter1;
LinkEntity linkEntity1 = new LinkEntity();
linkEntity1.JoinOperator = JoinOperator.LeftOuter;
linkEntity1.LinkFromEntityName = "opportunity";
LinkEntity1.LinkFromAttributeName = "opportunityid";
linkEntity1.LinkToEntityName = "email";
linkEntity1.LinkToAttributeName = "regardingobjectid";
query.LinkEntities.Add(linkEntity1);
FilterExpression filter2 = new FilterExpression();
문제는이 조건에 여기에있다. LinkCriteria
에 필터를 사용할 수는 있지만 링크 된 엔티티이므로 쿼리에는 사용할 수 없습니다. 게시 된 쿼리 당신이 있다면, 당신은 필터 (2)를 제거 할 수 및 필터링 추가해야합니다 위해 ...
무엇을 찾고있는 경우
filter2.AddCondition("regardingobjectid", ConditionOperator.Null);
query.LinkEntities[0].LinkCriteria = filter2;
EntityCollection result = _service.RetrieveMultiple(query);
Console.WriteLine(result.Entities.Count());
Console.ReadKey();
나는 전자 엔티티에없는 모든 기회를 찾고있다. 나는 SQL과 queryexpression 클래스에서 이것을 얻기 위해 왼쪽 조인을 사용했다. 문제는 내가 이메일 엔터티에 필터를 추가 할 수 없다는 것이다. 나는 filter2에있는 involjectid를 반영하기 위해 코드를 변경했다. – mdvr
@Madhavi는 특정 이메일 또는 모든 이메일에 대한 것입니까? 특정 전자 메일의 경우 왼쪽 조인에서 전자 메일을 지정하고 SQL 예제의 최종 성명은 "and ** o **. RegardingObjectId is null"이어야합니다. –
SQL이 요구 사항에 대해 정상적으로 작동하고 있습니다. 콘솔 애플 리케이션에서 쿼리 표현식에 critieria (e.regardingobject가 null 임)를 부여 할 수 없었습니다. – mdvr