首页 > 解决方案 > 异步 LINQ 查询

问题描述

我正在研究一个应该能够异步完成的 LINQ 查询,但它没有进行评估。在尝试解决这个问题时,我发现了这个页面: 客户端与服务器上的 MS 页面

它指出我应该能够将 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 指令或程序集引用?)

任何帮助,将不胜感激。

标签: linqasp.net-coreef-core-3.0

解决方案


您应该将所有转换EnumerableAsyncEnumerable

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();

推荐阅读