2012-06-21 5 views
1

링크 된 엔터티에 필터 조건을 추가하려면 어떻게해야합니까 (이 경우 전자 메일)? 중복 행을 제공하는 링크 조건에 필터 조건을 추가했습니다.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(); 

답변

0

는 잘 모르겠어요 1

filter1.AddCondition("opportunityid", ConditionOperator.Null); 

하지만 RegardingObjectId와 NULL 및 OpportunityID를 AND 연산으로 비교하는 것이 사실 일 수 없습니다.

+0

나는 전자 엔티티에없는 모든 기회를 찾고있다. 나는 SQL과 queryexpression 클래스에서 이것을 얻기 위해 왼쪽 조인을 사용했다. 문제는 내가 이메일 엔터티에 필터를 추가 할 수 없다는 것이다. 나는 filter2에있는 involjectid를 반영하기 위해 코드를 변경했다. – mdvr

+0

@Madhavi는 특정 이메일 또는 모든 이메일에 대한 것입니까? 특정 전자 메일의 경우 왼쪽 조인에서 전자 메일을 지정하고 SQL 예제의 최종 성명은 "and ** o **. RegardingObjectId is null"이어야합니다. –

+0

SQL이 요구 사항에 대해 정상적으로 작동하고 있습니다. 콘솔 애플 리케이션에서 쿼리 표현식에 critieria (e.regardingobject가 null 임)를 부여 할 수 없었습니다. – mdvr

0

링크 된 엔터티에 조건을 추가하는 것과 비슷한 문제가있었습니다. 2013 다이나믹스를 사용하여 2013 다이나믹을 사용할 수는 있지만 2013 다이나믹을 사용할 수 있는지 확인해야합니다. 참조하시기 바랍니다 Microsoft Dynamics Crm Sdk - Is this query possible?

2013 SDK와의 기본적인 차이점은 필터에 조건을 추가 할 수 있지만 연결된 엔티티의 엔티티 이름을 지정할 수 있다는 것입니다. 즉, 실제로 링크 엔티티 자체에 조건을 추가하지는 않습니다.

또한 링크를 통해 Linq 공급자를 사용하여 다른 대안 인 쿼리를 작성하는 방법을 보여줍니다.

관련 문제