我在C#项目中有这个linq查询
var query = from p in db.Posts
join a in db.Author on p.Author equals a
join u in db.Users on p.PostedBy equals u
where p.IsActive.Equals(true)
orderby p.PostedDate descending
select new ViewModel
{
...
};
如果我将where p.IsActive.Equals(true)
移到from p in db.Posts
附近,例如
var query = from p in db.Posts
where p.IsActive.Equals(true) //Moved
join a in db.Author on p.Author equals a
join u in db.Users on p.PostedBy equals u
orderby p.PostedDate descending
select new ViewModel
{
...
};
它会对查询的性能产生任何影响吗?
答案 0 :(得分:1)
我不确定如果你这样做它会起作用,但如果你在SQL数据库中使用它,它应该没有任何区别。两个查询都将被翻译为SQL,如下所示:
SELECT ...
FROM Posts INNER JOIN Author ON ... INNER JOIN Users ON ...
WHERE Posts.IsActive = true
...
答案 1 :(得分:1)
关于表现,我强烈建议放 在任何地方之前加入。
原因是,连接已经变小了 (p从帖子中选择,然后才选择 来自作者和用户的匹配行。
相反,如果你有一个接近开头的地方 计算一个caresian(大)产品,然后过滤。 (在您的特殊情况下,只有一个表受到影响,但是 查询可能会在某个时候被更改,然后没有人知道 为什么它很慢。)
请阅读此SO Why is LINQ join so much faster than LINQ where
更多关于您的特殊情况:因为这会影响数据库, 两个查询中生成的SQL语句应该相同。 看看它!