[英]LINQ deferred (or immediate?) execution
給定以下查詢:
List<GetMultipleLookupListsOutput> data = await _masterListTranslationsRepository
.GetAll() //<- it returns IQueriable
.GroupBy(q => q.ListLabelID)
.Select(q => q
.OrderByDescending(w=>w.ISOLanguageCode == isoLanguageCode)
.ThenByDescending(w=>w.ISOLanguageCode == "en-US"))
.Select(q => q.FirstOrDefault()) // DB call ?
.GroupBy(q=>q.ListLabels.Lists.ListName)
.Select(q => new GetMultipleLookupListsOutput
{
ListName = q.Key,
LookupLists = q
.OrderByDescending(w => w.ISOLanguageCode == isoLanguageCode)
.ThenByDescending(w => w.ISOLanguageCode == "en-US")
.Select(w => new RegionalFeatureDto
{
Id = w.Id,
Label = w.BaseValue
})
.ToList() // DB call ?
})
.ToListAsync();
它會生成多少個數據庫調用?
GetAll()
方法返回IQueryable
,但是第二個和第三個select語句中的FirstOrDefault()
和ToList()
是否會觸發數據庫調用?
任何幫助將不勝感激。
如果您擔心產生多個調用,我會考慮使用EntityFramework Extensions
您可以通過在查詢末尾添加.Future()來一起批處理查詢
例:
db.BlogPosts.Where(x => x.Category.Any(y => y.Name.Contains("EntityFramework"))).Future();
因此,要回答您的問題,您可以將這些合並為一個對數據庫的調用。
要檢查SQL /批處理,您還可以在查詢之前添加以下內容:
db.Database.Log = s => System.Diagnostics.Debug.WriteLine($"SQL: {s}");
日志將顯示在您的輸出窗口中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.