我有以下查询:
public IEnumerable<Team> GetAllTeamsWithMembers(int ownerUserId)
{
return _ctx.Teams
.Include(x => x.TeamMembers)
.Where(x => x.UserId == ownerUserId)
.OrderBy(x => x.Name).ToList();
}
我该如何按球队名称排序,然后让每个团队的所有子成员都按其名称排序?
看来我需要创建一个新的DTO类并使用一个select。我想使用已经创建的EF实体,在这种情况下,团队具有成员的导航属性。我从存储库层返回
IEnumerable<Team>
。在EF中似乎没有一种整齐的方法来订购子级集合。有人可以帮忙吗?
最佳答案
您可以加载数据并在加载后在内存中进行排序。
IEnumerable<Team> teams = _ctx.Teams
.Include(x => x.TeamMembers)
.Include(x => x.TeamMembers.Select(u => u.User))
.Where(x => x.UserId == ownerUserId)
.OrderBy(x => x.Name).ToList();
foreach (var team in teams)
{
team.TeamMembers = team.TeamMembers.OrderBy(m => m.Name);
foreach (var teamMember in team.TeamMembers)
{
teamMember.Users = teamMember.Users.OrderBy(u => u.Name);
}
}
或者,您可以使用Projections并使用EF的变更跟踪对集合进行排序。过滤包含的Here is an example,但对Ordering的作用相同。
关于linq - 如何在EF中订购实体的子级集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8447384/