Linq 实体框架“连接”导致从SQL返回整个表
我们正在这样编写实体lambda表达式查询。但当我们登记档案时。连接中使用的几乎所有表都将整个表返回给.net linq查询 我们只有很少的事务表有数千条记录。这会导致性能问题。 请告知我们是否可以避免表将整行返回到.netLinq 实体框架“连接”导致从SQL返回整个表,linq,entity-framework,Linq,Entity Framework,我们正在这样编写实体lambda表达式查询。但当我们登记档案时。连接中使用的几乎所有表都将整个表返回给.net linq查询 我们只有很少的事务表有数千条记录。这会导致性能问题。 请告知我们是否可以避免表将整行返回到.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 equ
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();
嗯,没有真正的答案,因为我没有足够的信息,但有几点意见,以改善您的查询 第一句话:不要使用Contains和HasValue,因为Linq不会对这些操作进行SQL化。我也不太清楚这个背景。东西 第二:NULL不会加入智能连接
第三:不选择f,通常只选择几个需要的f字段。您需要重写查询。EF真的需要让所有线路都使用操作员吗?以计算第四列中的值。我相信
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();
将满足您的需求,而无需额外的开销,该评估似乎是多余的。请发布生成的查询。