【发布时间】:2018-02-26 23:34:10
【问题描述】:
我在使用 IEnumerable 时遇到问题。 _entities 是来自 EF Core DbContext 的 IQueryable。 _result 是 IEnumerable。
此代码不起作用; _result 仍未排序。
var _result = _entities.Select(s => this.IMapper.Map<Models.role, DTO.role>(s));
foreach (var _role in _result)
{
_role.permissions = _role.permissions.OrderBy(o => o.module).ThenBy(o => o.feature).ToArray();
}
return _result;
此代码确实有效; _result 已排序。
var _result = _entities.Select(s => this.IMapper.Map<Models.role, DTO.role>(s)).ToArray();
foreach (var _role in _result)
{
_role.permissions = _role.permissions.OrderBy(o => o.module).ThenBy(o => o.feature).ToArray();
}
return _result;
谁能解释一下?
【问题讨论】:
-
您说 _result 仍未排序,但您没有任何代码对 _result 进行排序。您正在对 _result 列表中的另一个列表进行排序,这是您的意思吗?
-
@贾斯汀:确实。我的糟糕,不清楚的帖子。 _result 的属性
permission仍未排序。 -
IEnumerable是一个基础接口,但最好将IEnumerables 视为集合的投影,而不是集合本身。如果您想以某种方式改变集合或其项目,请考虑首先将投影转换为集合类型(列表等) -
旁白:您最好将此代码放入 Mapper 本身,以便每个到 DTO.role 的映射都带有排序权限。这也将解决您的 Enumerable 被评估两次(或更多)的问题。
标签: c# .net-core ienumerable