2013-08-01 16 views
2

如果我的代码如下所示,数据库被调用两次为AnyWhereLINQ数据库调用次数

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

您可以使用分析器并在行动中看到它;) – OzrenTkalcecKrznaric

+0

是的。你应该用'Where'调用一次,然后检查是否有结果返回。 – gzaxx

+0

是不是可以将这两个查询结合起来? Google for LINQ示例。并使用LINQ Pad来可视化您的查询 – sarat

回答

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

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

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