簡體   English   中英

LINQ to Dynamics CRM查詢優化

[英]LINQ to Dynamics CRM query optimisation

我正在使用鏈接到Dynamics CRM Online的網站。 我對這兩者都不熟悉,但找到最好的學習方法就是讓自己承受壓力。

無論如何,我有使用LinqPad構建的以下LINQ查詢:

from m in py3_membershipSet
join c in ContactSet on m.py3_Member.Id equals c.ContactId 
where m.statuscode.Value == 1
orderby m.py3_name
select m

但是,這會給出內存不足的異常。 如果我使用Take(100)它運行正常但我希望總共可以檢索大約1200個結果。 內存問題是否是LinqPad相關的問題,我不知道,但無論哪種方式,我假設上述查詢不是拉這些結果的最有效方法。

我真的可以幫助提高效率,如果它是通過LinqPad出現的內存耗費。

OutOfMemory異常

當沒有足夠的內存來繼續執行程序時拋出....

所以我認為你所編寫的Linq並沒有特別之處 - 除了它返回的數據多於客戶可以處理的數據。 我懷疑這是一個與客戶有關的問題,而不是CRM或Linq。

這可能與LinqPad有關(我自己沒用過),你試過從控制台應用程序運行該腳本(以排除任何LinqPad問題)嗎?

1200聽起來不像和可怕的數據,我經常檢索1000~記錄沒有問題,但我很高興檢索到更多(5000〜)。

分頁可能會避免這個問題; 使用LINQ的頁面大結果集

相關閱讀: 故障排除異常:System.OutOfMemoryException

由於查詢不知道以后將需要哪些字段,因此當只在select子句中指定實體時,將從實體返回所有列。 要僅指定要使用的字段,必須在select子句中返回一個新對象,指定要使用的字段。

所以不是這樣的:

from m in py3_membershipSet
join c in ContactSet on m.py3_Member.Id equals c.ContactId 
where m.statuscode.Value == 1
orderby m.py3_name
select m

用這個:

from m in py3_membershipSet
join c in ContactSet on m.py3_Member.Id equals c.ContactId 
where m.statuscode.Value == 1
orderby m.py3_name
select new py3_membership()
{
    py3_membershipid = m.py3_membershipid,
    py3_name = m.py3_name
}

看看這篇文章的更多細節。

要Linq還是不要Linq

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM