gpt4 book ai didi

c# - Entity Framework - 加载子集合,按子属性排序

转载 作者:行者123 更新时间:2023-11-30 21:43:52 25 4
gpt4 key购买 nike

我正在开发一个应用程序,该应用程序存在多个错误,这些错误与以错误顺序加载对象的列表集合有关。我想修改 DataMapper 以按其子属性 StatementNumber (int) 对列表(语句)进行排序。

我对 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();
}

我做错了什么?

最佳答案

在实体的默认构造函数中,使用排序集而不是哈希集或任何其他集合类型来初始化集合字段。

您可以提供自定义比较器。 https://msdn.microsoft.com/en-us/library/dd412070(v=vs.110).aspx

这样您的集合将始终排序,并且您的对象模型可能会得到改进。

也就是说,如果您不想更改您的实体,如您链接的响应中所述,请使用 Load() 方法对每个集合进行一个查询。

关于c# - Entity Framework - 加载子集合,按子属性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com