2013-08-01 29 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查詢。第二個查詢僅在此處定義,並且在您嘗試獲取結果時將執行。