[英]Self JOIN query using EF-Core
我有一个旧的存储过程从自引用表中选择数据。
exists (select *
from MyTable t1
join MyTable t2 on t1.model = t2.model
where t1.name = 'Name1'
and t1.value = 'Value1'
and t2.name = 'Name2'
and t2.value = 'Value2'
and t1.model = @model)
我们将代码移至 EF Core。 有没有更有效的方法来构建上述查询?
我可以想象这样的事情
SELECT COUNT(*)
FROM MyTable
WHERE
(model= @model) AND (
(name = 'Name1' AND value = 'Value1') OR
(name = 'Name2' AND value = 'Value2'))
并检查返回值,所以在 EF
var v = await repository
.AsNoTracking()
.Where(t => t.model == model &&
(t.name == 'Name1' && t.value='Value1' ||
t.name == 'Name2' && t.value == 'Value2'))
.CountAsync();
与 JOIN 相比,这是一种更有效的方法吗? 我可以看到存在差异,但是,根据我们数据的性质,结果应该是相同的。
评论太长了。
哪个更快取决于您的数据、您的数据 model 以及您运行它的系统。 因此,您应该在系统上测试这两个版本。
但是,一般来说, exists
可以在它遇到的与条件匹配的第一行处停止。 假设您有适当的索引,那么join
的开销应该是最小的。 因为它可以更快地停止,所以可以合理地假设该版本比使用聚合的方法更快。 聚合需要找到所有匹配项,因此即使只有一个匹配项,也需要继续查找所有匹配项以返回计数 1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.