2014-09-22 63 views
0

我在C#中有一個EntityCollection ec已填充所有帳戶。 現在我想要ec中的另一個List或EntityCollection,它的所有帳戶都處於活動狀態。MSCRM 2011 EntitCollection和LINQ空結果集

我使用相同的Linq。

但LINQ的兩種形式返回一個空的結果,而EC擁有354多項紀錄

var activeCRMEC = (from cl in ec.Entities 
       where cl.Attributes["statecode"].ToString()=="0" 
       select cl); 

OR

var activeCRMEC = ec.Entities.Where(x => x.Attributes["statecode"].ToString() == "0"); 

每次結果集是空的,我無法遍歷超過它。 300個左右的帳戶是活躍的,我已檢查。 同樣的事情發生時,我使用一些其他屬性,如名稱等

請友善指出我的錯誤。

回答

0

您可以生成早期綁定類來編寫Linq查詢。

或Else

你可以寫LINQ查詢使用後期綁定使用OrganizationServiceContext類

,供大家參考:

OrganizationServiceContext OrgServiceCOntext = new OrganizationServiceContext(service); 

var RetrieveAll = OrgServiceCOntext.CreateQuery("account"). 
       ToList().Where(w => (w.GetAttributeValue<OptionSetValue>("statecode").Value ==0)).Select(s=>s); 
0

我會給你一些提示,然後告訴你我猜你的問題是什麼。

首先,使用早期綁定的實體。如果您以前從未生成過這些文件,請使用earlybound generator,這樣您可以節省很多麻煩。

其次,如果您不能使用早期綁定的實體,請在Entity類上使用GetAttribute()方法。它會爲你轉換類型,並處理空引用問題。

你的LINQ表達式看起來是正確的,所以ec.Entities中沒有任何符合「狀態碼」等於0的條件的實體,或者你的IEnumerables上可能有一些不同的執行。嘗試在LINQ語句後立即在activeCRMEC上調用ToList(),以確保這不是您的問題。

0

的statecode是OptionSetValue,你應該將其丟在這樣

((OptionSetValue)cl.Attributes["statecode"]).Value == 0 

cl.GetAttributeValue<OptionSetValue>("statecode").Value == 0 

這兩種方法都是有效的,你應該問的價值,它是一個int。

希望這可以幫助你。