2

如果我有如下代码,那么数据库是否会被调用Any两次Where

if (context.SomeTable.Any(x => x.SomeValue == "A"))
    var result = context.SomeTable.Where(x => x.SomeValue == "A")
4

2 回答 2

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
}

但当然,这是为了限制返回的记录数量而故意编写的,并且它实现了结果。如果您在发现有多少条记录之前不知道要采用哪条路径,并且此时您不想将数据加载到内存中,那么它就会变得更加棘手。

于 2013-08-01T10:06:34.467 回答
1

是的,它会被调用两次。做这样的检查也没有任何意义——如果有数据,你无论如何都应该加载它们。

注意实际上您的代码只执行一个Any查询。第二个查询仅在此处定义,将在您尝试获取结果时执行。

于 2013-08-01T10:06:34.677 回答