如果我的代码如下所示,数据库被调用两次为Any
和Where
?LINQ数据库调用次数
if (context.SomeTable.Any(x => x.SomeValue == "A"))
var result = context.SomeTable.Where(x => x.SomeValue == "A")
如果我的代码如下所示,数据库被调用两次为Any
和Where
?LINQ数据库调用次数
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
查询。第二个查询仅在此处定义,并且在您尝试获取结果时将执行。
您可以使用分析器并在行动中看到它;) – OzrenTkalcecKrznaric
是的。你应该用'Where'调用一次,然后检查是否有结果返回。 – gzaxx
是不是可以将这两个查询结合起来? Google for LINQ示例。并使用LINQ Pad来可视化您的查询 – sarat