【问题标题】:async LINQ query异步 LINQ 查询
【发布时间】:2020-04-09 19:31:36
【问题描述】:

我正在处理一个应该能够异步完成的 LINQ 查询,但它没有进行评估。在试图解决这个问题时,我发现了这个页面: MS Page on Client vs Server

它指出我应该能够将 AsAsyncEnumerable 添加到我的 LINQ 以使其工作。但是,它甚至无法编译。

我有以下工作,但正在同步运行:

    AreaLookupTb = _context.AreaLookupTb
                    .AsEnumerable()
                    .GroupJoin(_context.LocationTb, a => a.AreaId, b => b.AreaId, (a, b) => new GroupingStats { ID = a.AreaId, Name = a.Name, Description = a.Description, Count = b.Count() })
                    .OrderBy(n => n.Name)
                    .ToList();

你会认为我需要做的就是让它异步:

    AreaLookupTb = await _context.AreaLookupTb
                    .AsAsyncEnumerable()
                    .GroupJoin(_context.LocationTb, a => a.AreaId, b => b.AreaId, (a, b) => new GroupingStats { ID = a.AreaId, Name = a.Name, Description = a.Description, Count = b.Count() })
                    .OrderBy(n => n.Name)
                    .ToListAsync();

唉,事实并非如此。 VS2019给我的错误是这样的:

错误 CS1061“IAsyncEnumerable”不包含“GroupJoin”的定义,并且找不到接受“IAsyncEnumerable”类型的第一个参数的可访问扩展方法“GroupJoin”(您是否缺少 using 指令或程序集引用?)

任何帮助将不胜感激。

【问题讨论】:

  • 这是ToAsyncEnumerable() 而不是AsAsyncEnumerable()
  • 如果有帮助,请将答案标记为已接受,否则请发表评论。

标签: linq asp.net-core ef-core-3.0


【解决方案1】:

您应该将所有Enumerable 转换为AsyncEnumerable

AreaLookupTb = await _context.AreaLookupTb
                    .ToAsyncEnumerable()
                    .GroupJoin(_context.LocationTb.ToAsyncEnumerable(), a => a.AreaId, b => b.AreaId, (a, b) => new GroupingStats { ID = a.AreaId, Name = a.Name, Description = a.Description, Count = b.Count() })
                    .OrderBy(n => n.Name)
                    .ToListAsync();

【讨论】:

  • 我尝试了几种不同的方法来纠正这个问题,但都没有奏效。当我将 AsEnumerable 更改为 ToAsyncEnumerable 时,VS 告诉我它应该是 AsEnumerable 并且不会编译。如果我这样做,我会回到上面所说的第 1 格。长话短说这行不通。
  • 链接到link GitHub。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多