2016-10-04 110 views
-2

我怎樣才能找到(最好使用CRM Linq)有0個孩子的父實體。例如,我怎樣才能找到所有有0個聯繫人的賬戶。CRM Linq找到所有有0個孩子的父母

+2

你所要求的是非常簡單的,但至少要提供一些代碼,一些模型,設計,檢查http://stackoverflow.com/help/mcve –

+0

如果這很簡單,爲什麼我不能做到這一點? – user3845056

+0

要了解這一點,發佈一些代碼並顯示你已經嘗試了什麼,你當然不能指望勺子餵食 –

回答

2

如果你要使用的查詢表達式的路線,我會建議,然後將下面的代碼將是有益的

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; 

在這代碼我沒有限制列,這會降低性能,你應該只返回所需的列。

如果有超過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來完成此操作。

這裏是一個鏈接,可以幫助你: 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如果您對我的答案感到滿意,請將其標記爲接受的答案。謝謝。 –

相關問題