我首先使用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
'
- 如何返回变量
IEnumerable<Country>
因为这是接收代码所期望的,即国家/地区列表? - 我的分组是否正确?
- 对于性能,我假设分组比非重复或包含更好
如果要拥有不同的国家/地区,则可以在之后使用选择来选择每个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
,您甚至不再从数据库中获取状态。