[英]Entity Framework: after SaveChanges returned object doesn't have children
[英]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.