2014-09-22 120 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(); 

会满足您的需要没有必要的开销,该评估似乎是多余的。