CS0266 无法将类型"System.Collections.Generic.List<System.Linq.IGrouping 转换为"System.Collections.Generic



我首先使用Entity Framework 7代码

我有一个函数需要返回链接到用户的国家(ids,名称)列表。用户不直接链接到国家/地区,而是通过城市链接。城市与州相连。国家与国家相关联。

我决定使用Groupby来获取国家/地区列表。

 public async Task<IEnumerable<Country>> Search(int userId)
 {
  var table = await _db.Cities
      .Include(ci => ci.States.Country)
      .Select(ci => ci.States.Country)
      .OrderBy(co => co.CountryName)
      .GroupBy(co=>co.pk_CountryId)
      .ToListAsync()
      ;
      return table;
 }

但是我收到错误:

CS0266 无法隐式转换类型 ' System.Collections.Generic.List <System.Linq.IGrouping> 到 ' System.Collections.Generic.List '

  1. 如何返回变量IEnumerable<Country>因为这是接收代码所期望的,即国家/地区列表?
  2. 我的分组是否正确?
  3. 对于性能,我假设分组比非重复或包含更好

如果要拥有不同的国家/地区,则可以在之后使用选择来选择每个IGrouping<int,Country>中的第一个国家/地区:

 public async Task<IEnumerable<Country>> Search(int userId)
 {
 return await _db.Cities
  .Include(ci => ci.States.Country)
  .Select(ci => ci.States.Country)
  .OrderBy(co => co.CountryName)
  .GroupBy(co=>co.pk_CountryId)
  .Select(co => co.FirstOrDefault())
  .ToListAsync();
 }

还有一点旁注,这里不需要Include,急切加载国家/地区只有在您要返回States并希望填充其Country属性时才有用。Select确保您正在抓取Country,您甚至不再从数据库中获取状态。

相关内容

最新更新