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

标签 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();

        }

我该如何按球队名称排序,然后让每个团队的所有子成员都按其名称排序?

看来我需要创建一个新的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/

相关文章:

c# - 迭代 lambda 表达式的属性?

c# - 合并xml文件

javascript - 在没有 SPA 的情况下使用 BreezeJS

c# - 具有数据表的C#Linq-从一个表中选择另一个表中不存在的内容

c# - LINQ select( x => x ) 的可能用途

C# 和 LINQ : ordering a query by a nested query's value

c# - SQL,合并两个表进行查询

c# - 一次将两条记录插入两个表中,其中一个表使用另一个表作为外键?

c# - MySQL Entity Framework 在尝试添加时抛出异常

c# - 在 EF 中手动调用 DbMigration.Up