2016-10-04 8 views
-2

子供が0人の親エンティティ(どのようにしてCRM Linqを使用するのが望ましい)をどのように見つけることができますか?たとえば、連絡先が0のアカウントをすべて見つけるにはどうすればいいですか?CRM Linq子供が0人のすべての親を見つける

+2

あなたが求めているのは、かなりシンプルですが、少なくともいくつかのコード、いくつかのモデル、デザインを提供することに気をつけてください。 –

+0

これは簡単な理由です。 – user3845056

+0

これを理解するには、いくつかのコードを記入し、試したことを示してください。確かにスプーンの供給は期待できません。 –

答えて

2

:ここ

はあなたを助けることができるリンクですコード私は列を制限していない、これはパフォーマンスを低下させ、必要な列だけを返す必要があります。

5000の以上のレコードのケースがあれば返却しようとしている、あなたはすべてのエンティティを見つけるために、ページングやループクエリを使用する必要があります、 これは、ここで見つけることができます:

https://msdn.microsoft.com/en-us/library/gg327917.aspx

しかし、あなたが特定されている場合は、あなたが次のコードを使用することができますLINQを使用したい:

public static IEnumerable<Account> FindAccountsWithNoContacts() 
{ 
    var contactRelationship = new Relationship("contact_customer_accounts"); 
    foreach(var account in XrmContext.AccountSet) 
    { 
     XrmContext.LoadProperty(contactRelationship); 
     if(!account.RelatedEntities.ContainsKey(contactRelationship) 
     yield return account; 

    } 
} 

をLINQコードと私の問題は、すべてのenities、両方のアカウントと接触するエンティティということだろうですメモリにロードされます。大規模なエンティティセットでは、これによりOutOfMemoryExceptionが発生することがありますが、クエリ式のルートはクエリを実行するDynamicsサーバーに渡します。これにより、コードの実行が速くなるはずです。

+0

合意されたクエリ式がより効率的なコードです。 – user3845056

2

あなたが探しているものは、外部結合に残っています。残念ながら、LINQを使用するCRMではこれが不可能です。ただし、クエリ式またはFetchXMLを使用して行うことができます。あなたは、私は、次のコードは、この中

var entityAlias = "con"; 
var query = new QueryExpression 
     { 
      EntityName = "account", 
      ColumnSet = new ColumnSet(true), 
      Criteria = 
      { 
       FilterOperator = LogicalOperator.And, 
       Conditions = 
       { 
        new ConditionExpression(entityAlias, "contactid",ConditionOperator.Null) 
       } 
      } 
      LinkEntities = 
      { 
       new LinkEntity 
       { 
        EntityAlias = entityAlias, 
        LinkFromEntityName = "account", 
        LinkFromAttributeName = "accountid", 
        LinkToEntityName = "contact", 
        LinkToAttributeName = "parentcustomerid", 
        Columns = new ColumnSet("parentcustomerid", "contactid"), 
        JoinOperator = JoinOperator.LeftOuter, 
       } 
      }, 
     }; 

var response = service.RetrieveMultiple(query); 
var accounts = response.Entities; 

有用であろう推薦クエリ式のルートを、使用しようとしている場合は https://community.dynamics.com/crm/b/gonzaloruiz/archive/2014/02/23/all-about-outer-join-queries-in-crm-2011-and-crm-2013

+0

あなたは100%正しいです私はLinq CRMに左外部結合がないので苦労しています。私は、linqがcrmソリューションを望んでいたが、フェッチが行うだろう。 THanks – user3845056

+0

'Left Outer Join'は子どもを見つけるための唯一の方法ですが、他の' Linq APIs 'は助けませんか? –

+0

@ user3845056あなたが私の答えに満足すれば、それを受け入れられた答えとしてマークしてください。ありがとう。 –

関連する問題