0
这是我的查询与Contains
:优化EF查询,而不是包含
db.NavFilters.Where(finalExpression)
.Count(x => x.Attribute1 == e.Attribute && x.Link == link && x.SubLink == subLink && db.NavItemsFilters
.Where(n=> !(n.Promo == string.Empty || n.Promo == null))
.Select(n=>n.ItemID)
.Contains(x.ItemID))
但是,据我所知,包含是硬的操作,我需要优化它。这样的查询是否会给出相同的结果?
db.NavFilters.Where(x=> db.NavItemsFilters.Any(n=>n.Promo != string.Empty && n.ItemID == x.ItemID))
.Where(finalExpression)
.Count(x => x.Attribute1 == e.Attribute && x.Link == link && x.SubLink == subLink)
我知道,最好的解决方案是添加导航属性。但我不能这么做,原因很多。
Iqueryable.contains是怎样的一个黑客,因为没有办法in'使用LINQ到SQL/LINQ到实体翻译SQL'。它只是创建了大量的'或'语句,对于大型集合,大部分时间甚至会创建该查询 –
@AlexanderDerck这不是事实。当在内存集合中使用“Contains”时,你所说的内容就适用了。事实上,当用于真正的EF可查询时,'Contains'和'Any'与'EXISTS(subquery)'子句生成一个和相同的SQL。 –
@IvanStoev嗯,你只是看着它,我不记得我曾读过那里的一次......谢谢你清理那个:) –