gpt4 book ai didi

c# - LINQ 延迟(或立即?)执行

转载 作者:行者123 更新时间:2023-11-30 21:47:53 28 4
gpt4 key购买 nike

给定以下查询:

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()第三个选择语句将触发数据库调用?

如有任何帮助,我们将不胜感激。

最佳答案

如果您担心生成多个调用,我会考虑使用 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}");

并且日志将显示在您的输出窗口中。

关于c# - LINQ 延迟(或立即?)执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38079586/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com