我知道实体框架还不支持子集合中的排序或过滤。我的想法是首先我获取数据然后使用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();
繁星点点滴滴
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 等不会更改顺序,它们返回有序结果,您必须将其具体化。
- 2 回答
- 0 关注
- 136 浏览
添加回答
举报
0/150
提交
取消
