我正在处理一个应用程序,该应用程序有一些与List集合相关的错误,这些错误以不正确的顺序加载对象。我想修改DataMapper以按子属性StatementNumber(int)对List(语句)进行排序。
我对EF的掌握不是100%,但我发现了类似的问题,我认为第二个解决方案就是我需要的答案。我只是很难实现它。 Entity Framework loading child collection with sort order
在我修改之前,Data Mapper类中的现有代码:
public async Task<CoLab> GetCoLabAsync(int id)
{
return await (from d in _sdContext.CoLabs
.Include(d => d.Project)
.Include(d => d.CoLabType)
.Include(d => d.Clusters)
.Include(d => d.Clusters.Select(c => c.Statements))
.Include(d => d.Statements)
.Include(d => d.TriggeringQuestion)
.Include(d => d.CoLabLocations)
.Include(d => d.Statements.Select(s => s.Clusters))
.Include(d => d.Statements.Select(s => s.Votes))
where d.Id == id
select d).SingleOrDefaultAsync();
}
我未能成功实施排序解决方案:
public async Task<CoLab> GetCoLabAsync(int id)
{
return await (from d in _sdContext.CoLabs
.Include(d => d.Project)
.Include(d => d.CoLabType)
.Include(d => d.Clusters)
.Include(d => d.Clusters.Select(c => c.Statements))
.Include(d => new
{
D = d.Statements,
C = d.Statements.OrderBy(c => c.StatementNumber)
})
.Include(d => d.TriggeringQuestion)
.Include(d => d.CoLabLocations)
.Include(d => d.Statements.Select(s => s.Clusters))
.Include(d => d.Statements.Select(s => s.Votes))
where d.Id == id
select d).SingleOrDefaultAsync();
}
我做错了什么?
答案 0 :(得分:3)
在实体的默认构造函数中,使用有序集而不是hashset或任何其他集合类型初始化集合字段。
您可以提供自定义比较器。 https://msdn.microsoft.com/en-us/library/dd412070(v=vs.110).aspx
这样,您的集合始终会被排序,您的对象模型可能会得到改进。
话虽如此,如果您不想更改您的实体,如您链接的回复中所述,请使用Load()方法对每个集合进行一次查询。