1
考虑以下查询(或直接):LINQ延迟执行
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
,但确实FirstOrDefault()
和ToList()
在第二和第三选择语句会触发数据库调用?
任何帮助将不胜感激。
对不起,删除了我的答案,因为我意识到它比我想象的要复杂一点。但我想你可以通过简单地运行代码并检查数据库日志或调试代码来得到答案。 –
我同意@RenéVogt,对我来说实际测试您的具体查询并不容易,但正如我在回答中所述,日志应该告诉您有多少个调用与查询相关联 – chandler