繁体   English   中英

按实体框架中的子项排序不会返回排序列表

[英]Sorting by Children in Entity Framework doesn't return sorted list

我知道Entity框架还不支持子集合中的排序或过滤器。 我的想法是,首先我获取数据然后使用foreach循环对其进行排序。 结果给了我一个未排序的列表。 我的目标是获得Participants (任何订单)和CurrentHospitaliztions (按降序排序),这是参与者的孩子。 模型和查询如下。 任何帮助都会得到满足。

public class Participant
{
    public int Id { get; set; }
    .. other fields

    public ICollection<CurrentHospitalization> CurrentHospitalizations { get; set; }

    public Participant()
    {
        CurrentHospitalizations = new Collection<CurrentHospitalization>();
    }
}

public class CurrentHospitalization
{
    public int Id { get; set; }
    .. other fields

    public Participant Participant { get; set; }
    public int ParticipantId { get; set; }

}

我使用的查询:

public async Task<IEnumerable<Participant>> GetList()
{
     var participants = await context.Participants
        .Include(x => x.CurrentHospitalizations)
        .ToListAsync();

        foreach (var p in participants )
        {
            var s = p.CurrentHospitalizations;
            foreach (var q in s)
            {
                s.OrderByDescending(u => u.Id);
            }
        }

        return participants ;
}

你在错误的地方对正确的部分进行了分类,然后却没有对它做任何事情。 您不需要嵌套迭代,您可以从单个foreach循环中执行此操作,如下所示:

foreach (var p in participants) 
    p.CurrentHospitalizations = p.CurrentHospitalizations.OrderByDescending( ch => ch.Id ).ToList();

你在这里说的是没有理解LINQ的基础知识而不是阅读手册。

        var s = p.CurrentHospitalizations;
        foreach (var q in s)
        {
            s.OrderByDescending(u => u.Id);
        }

除了浪费处理器时间之外别无其他。

你做一个变量s。 您为其分配了当前的hospuzatlizations,未分类。

然后你调用OrderByDescending - 生成一个你可以执行的表达式,除非你从不执行它。 所以,你创建了一些对象树 - 扔掉它。

o.CurrentHospitalizations = s.OrderByDescending(u => u.Id).ToList()

将s指定为列表并执行它。 缺少ToList() - 以及分配它,因此排序的结果不会被丢弃。

那些是LINQ基础 - orderby等不改变顺序,它们返回一个有序的结果,你必须实现它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM