如果我有以下代码,那么Any
和Where
会调用两次数据库?
if (context.SomeTable.Any(x => x.SomeValue == "A"))
var result = context.SomeTable.Where(x => x.SomeValue == "A")
答案 0 :(得分:3)
是的,我希望它是。
您希望如何处理这取决于上下文。例如,您可能需要:
var result = context.SomeTable
.Where(x => x.SomeValue == "A")
.Take(10)
.ToList();
if (result.Count == 0)
{
// Indicate that there were no results
}
else
{
// Use it somehow
}
但当然是故意编写的,以限制返回的记录数,并实现结果。如果你不知道你要去哪条路径,直到你发现有多少条记录,并且你不想在那时将数据加载到内存 那么它变得更加棘手。
答案 1 :(得分:1)
是的,会被叫两次。进行此类检查也没有任何意义 - 如果有数据,您仍然应该加载它们。
注意实际上,您的代码只执行一次Any
查询。第二个查询仅在此处定义,并将在您尝试获取结果时执行。