1

リンクされたエンティティ (この場合は電子メールなど) にフィルター条件を追加するにはどうすればよいですか? リンク基準にフィルター条件を追加したため、重複した行が表示されました。

同等の 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リンクされたエンティティであるため、クエリではなくフィルターを使用できます。

filter2.AddCondition("regardingobjectid", ConditionOperator.Null);
query.LinkEntities[0].LinkCriteria = filter2;

EntityCollection result = _service.RetrieveMultiple(query);

Console.WriteLine(result.Entities.Count());
Console.ReadKey();
4

2 に答える 2

0

リンクされたエンティティに条件を追加する同様の問題がありました。ダイナミクス 2013 SDK を使用して実行できることがわかりましたが、2011 ダイナミクスに対して 2013 SDK を使用できるかどうかを確認する必要があります。Microsoft Dynamics Crm Sdk - このクエリは可能ですか?を参照してください。

2013 SDK との基本的な違いは、フィルターに条件を追加できることですが、リンクされたエンティティのエンティティ名をそれに付けることができます。これは、リンク エンティティ自体に条件を実際に追加しないことを意味します。

また、そのリンクで、Linq プロバイダーを使用してクエリを作成する方法も示します。これは、試してみたい別の方法です。

于 2014-03-25T19:20:42.800 に答える
0

投稿されたクエリがあなたが探しているものかどうかわかりません...

そうであれば、フィルター 2 を削除してフィルター 1 に追加できるはずです。

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

ただし、AboutObjectId を NULL と OpportunityID の両方と AND 演算で比較することは、真であってはなりません。

于 2012-06-21T21:03:55.837 に答える