【发布时间】:2019-08-28 03:49:34
【问题描述】:
我想知道哪些 LINQ 查询更有效(以及如何解决这个问题)。一个在 where 子句中包含所有逻辑,另一个在 where 子句中包含一半,在 Any 子句中包含一半。在这种情况下,数据来自 SQL Server。谢谢!
return (from c FamilyList
where c.Persons.Any(cp => cp.Person.PersonID == specificPersonID)
select c).Any(c => c.StartDate == null || c.StartDate > specificDate);
return (from c FamilyList
where c.Persons.Any((cp => cp.Person.PersonID == specificPersonID)
&& (c.StartDate == null || c.StartDate > specificDate)
select c).Any();
【问题讨论】:
-
我认为您的右括号在第二个示例中的位置错误。此外,您可能希望在第二个示例中将
StartDate子句括在括号中.. -
@RufusL 也许是
return FamilyList.Any(c => c.Persons.Any(p => p.Person.PersonID == sepecificPersonId) && (c.StartDate == null || c.StartDate > specificDate));? -
这两个都不能编译,除非您在 LINQ 查询中使用不需要
in的语言版本,而在第二个版本中cp在您使用时不存在检查cp.StartDate。 -
@JeppeStigNielsen 好点。在第二个示例中,它将人员开始日期 (
cp.StartDate) 与null和家庭开始日期 (c.StartDate) 与specificDate进行比较,所以有点令人困惑。 -
对不起,我编辑的时候不小心。我都更新了它们