是否有()运行LINQ查询
例如,如果我编写一个查询:是否有()运行LINQ查询,linq,linq-to-entities,Linq,Linq To Entities,例如,如果我编写一个查询: var query = (from a in this.Context.Addresses where a.Active select a.Name); 那么这样说对吗 if(query.Any()) return query.ToList(); return null; 请注意,查询没有FirstOrDefault()或ToList(),因此我正在记录是否。是否有任何()运行查询 是-它必须返回,因为它必须返回true或false。如果不运行查询,它不可能做
var query = (from a in this.Context.Addresses where a.Active select a.Name);
那么这样说对吗
if(query.Any())
return query.ToList();
return null;
请注意,查询没有
FirstOrDefault()
或ToList()
,因此我正在记录是否。是否有任何()
运行查询 是-它必须返回,因为它必须返回true
或false
。如果不运行查询,它不可能做到这一点
如果要有条件地返回ToList()
,最好编写:
var list = query.ToList();
return list.Any() ? list : null;
。。。或者我实际上建议您只返回
query.ToList()
,因为编写使用空列表的代码要比在特殊情况下使用空值容易得多。是的,确实如此。如果您在文档中没有找到“延迟”这个词,您可以非常肯定它会执行查询并立即返回结果。感谢@Timschmelter如果查询返回结果,那么可以安全地假设它已执行(否则您将如何接收结果)。因此,如果我对原始查询执行.ToList(),而不执行Any()检查,这也有助于提高绩效吗?因为这样看来我们要运行两次?一个是Any,一个是ToList?@Bohn是的,调用Any
然后调用ToList
将运行两个不同的SQL查询。调用ToList
然后调用Any
将只执行一个SQL查询。因此,如果我对原始查询执行.ToList(),而不执行Any()检查,这是否也有助于提高性能?因为这样看来我们要运行两次?一个和任何一个,一个和托利斯特@Bohn:这取决于结果查询是否被缓存,以及LINQ提供程序对Any
的具体操作-但是是的,我希望它至少对性能有潜在的帮助。@Bohn-是-以Any
结尾的查询将与以ToList
结尾的查询不同。Any
可能会被转换为SQL中的EXISTS
,而ToList
将执行完整查询并返回所有记录。然而,在列表上调用Any
非常快(可能比SQL调用快得多)。因此,调用ToList
然后调用Any
可能会更快。但是,我同意Jon的观点,标准做法是返回空集合,而不是null
(在这种情况下,您不需要任何调用)。我支持返回空列表,而不是null
。