如果我有如下代码,那么数据库是否会被调用Any
两次Where
?
if (context.SomeTable.Any(x => x.SomeValue == "A"))
var result = context.SomeTable.Where(x => x.SomeValue == "A")
如果我有如下代码,那么数据库是否会被调用Any
两次Where
?
if (context.SomeTable.Any(x => x.SomeValue == "A"))
var result = context.SomeTable.Where(x => x.SomeValue == "A")
是的,我希望它是。
你想如何处理这将取决于上下文。例如,您可能想要:
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
}
但当然,这是为了限制返回的记录数量而故意编写的,并且它实现了结果。如果您在发现有多少条记录之前不知道要采用哪条路径,并且此时您不想将数据加载到内存中,那么它就会变得更加棘手。
是的,它会被调用两次。做这样的检查也没有任何意义——如果有数据,你无论如何都应该加载它们。
注意实际上您的代码只执行一个Any
查询。第二个查询仅在此处定义,将在您尝试获取结果时执行。