2014-09-22 77 views
0

我們正在編寫像這樣的實體lambda表達式查詢。但是當我們檢查配置文件。幾乎所有的表都用於連接,將整個表返回到.net linq查詢。實體框架「連接」導致從SQL返回整個表格

我們有很少的事務表有數千條記錄。這是造成性能問題。 請讓我們知道,如果我們能避免表返回整個行.NET

var result = (from f in f 
    join a in this.Context.a on f.primeryKey equals a.primeryKey 
    join d in this.Context.d on f.secondid equals d.secondid 
    join t in this.Context.t on d.thirdId equals t.thirdId 
    where t.isfoo && pfIds.Contains(a.fourthId.HasValue ? a.fourthId.Value : -1) 
    select f).Distinct().ToList(); 
+0

請發佈生成的查詢。 – 2014-09-22 15:59:23

回答

0

好,沒有真正的答案,因爲我沒有足夠的信息,但幾句話來提高你的查詢。

第一條評論:不要做ContainsHasValue,因爲Linq不會SQL-iize這些操作。我也不太確定這一點。上下文。東東。

第二:NULL不會加入到智能連接中。

第三:您通常只選擇您需要的f的幾個字段,而不是選擇f

0

你需要重寫你的查詢。 EF真的需要獲得所有線路來利用運營商?以評估a.fourthId列中的值。我相信

var result = (from f in f 
    join a in this.Context.a on f.primeryKey equals a.primeryKey 
    join d in this.Context.d on f.secondid equals d.secondid 
    join t in this.Context.t on d.thirdId equals t.thirdId 
    where t.isfoo && pfIds.Contains(a.fourthId) 
    select f).Distinct().ToList(); 

會滿足您的需要沒有必要的開銷,該評估似乎是多餘的。