LINQ数据库调用次数

时间:2013-08-01 10:04:24

标签: linq

如果我有以下代码,那么AnyWhere会调用两次数据库?

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

2 个答案:

答案 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查询。第二个查询仅在此处定义,并将在您尝试获取结果时执行。