Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 实体框架“连接”导致从SQL返回整个表_Linq_Entity Framework - Fatal编程技术网

Linq 实体框架“连接”导致从SQL返回整个表

Linq 实体框架“连接”导致从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

我们正在这样编写实体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 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();

将满足您的需求,而无需额外的开销,该评估似乎是多余的。

请发布生成的查询。