为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕后森 2022-06-19 09:50:12
我知道实体框架还不支持子集合中的排序或过滤。我的想法是首先我获取数据然后使用foreach循环对其进行排序。结果给了我一个未排序的列表。我的目标是获得Participants(任何顺序)和CurrentHospitaliztions(按 id 降序排列),它是参与者的孩子。模型和查询如下。任何帮助都会得到帮助。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 ;}
查看完整描述

2 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

你在错误的地方排序了正确的部分,然后并没有真正用它做任何事情。您不需要嵌套迭代,您可以像这样从单个 foreach 循环中完成它:

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



查看完整回答
反对 回复 2022-06-19
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

您在这里遇到的问题是无法理解 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 等不会更改顺序,它们返回有序结果,您必须将其具体化。


查看完整回答
反对 回复 2022-06-19
  • 2 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号