Используйте 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>)
подзапрос, который позволяет закорочить результат, как только найдено первое совпадение.
Точное сопоставление SQL можно найти в этом ответе SO: результат запроса, что я должен использовать Count () или Any ()