如何在EF中订购实体的子集合

jaf*_*ffa 28 linq entity-framework

我有以下查询:

public IEnumerable<Team> GetAllTeamsWithMembers(int ownerUserId)
        {
            return _ctx.Teams
                 .Include(x => x.TeamMembers)
                 .Where(x => x.UserId == ownerUserId)
                 .OrderBy(x => x.Name).ToList();

        }
Run Code Online (Sandbox Code Playgroud)

我如何按照他们的名字订购团队,然后按照他们的名字对每个团队的所有子成员进行排序?

似乎这样做我需要创建一个新的DTO类并使用select.我想使用已经创建的EF实体,在这种情况下,Team具有成员的导航属性.我IEnumerable<Team>从我的存储库层返回.

在EF中似乎没有一种简洁的方式来订购子集合.有人可以帮忙吗?

Wou*_*ort 24

加载后,您可以加载数据并在内存中排序.

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

或者您可以使用预测并使用EF的更改跟踪来对您的集合进行排序.以下是过滤Include 的示例,但订购的相同功能.

  • 谢谢你,简单而有效.我认为可能会有更多的LINQish,不热衷于循环,但它完成了工作! (2认同)