如果我的代碼如下所示,數據庫被調用兩次爲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