我有一个LINQ to SQL查询,类似于以下内容......
return from parent in Context.Parents
where
(
(parent.SomeProperty != null && parent.SomeProperty != "")
||
(Context.Childs.Count(c => c.ParentID == parent.ID && c.Type == "SomeType") > 0)
)
select parent
我的想法是,我想找到所有已获得“SomeProperty”值或具有“SomeType”类型的子记录的父记录。
问题是查询超时。是否有更快(但仍易于阅读)的方式做同样的事情?
感谢阅读。
答案 0 :(得分:4)
使用Any()
代替Count()
:
return from parent in Context.Parents
where
(
(parent.SomeProperty != null && parent.SomeProperty != "")
||
Context.Childs.Any(c => c.ParentID == parent.ID
&& c.Type == "SomeType")
)
select parent;
在Linq to SQL中Count(<some condition>)
被翻译成:
SELECT COUNT(*) WHERE <some condition>
查询需要迭代数据库中的所有行才能找到计数。
在Linq to SQL中Any(<some condition>)
被翻译为
EXISTS (.. <some condition>)
子查询,它允许在找到第一个匹配项后短路结果。
可以在此SO答案中找到确切的SQL映射:query result what should i use Count() or Any()