Sup*_*pez 7 c# entity-framework-core
在我的 .NET Core / EF Core 应用程序中,我有一个带有嵌套子对象列表的模型。当我检索一个实例时,我需要按子项的属性之一对嵌套列表进行排序。通过查看 EF Core 上的类似问题和报告的问题,我了解到我无法在检索实例时对嵌套列表进行排序。所以现在我试图在加载到内存中后对其进行排序。但在这里我也没有成功。
我正在使用存储库模式来访问 DbContext。
对此列表进行排序的正确方法是什么,以便它始终从我的存储库中正确返回排序?
我试过的最新:
public async Task<Parent> GetParent(int id)
{
var loadedInMemory = context.Parents
.Include(p => p.Children)
.SingleOrDefaultAsync(p => p.Id == id);
var result = loadedInMemory.Result.Children.OrderBy(c => c.Sequence);
// When I order within the Task<Parent>, result becomes IOrderedEnumerable
// and I can't return it.
return await result;
}
Run Code Online (Sandbox Code Playgroud)
小智 8
从 Entity Framework Core 5.0 开始,您可以直接在语句中排序 ( OrderBy) 和过滤器 ( Where) Include(有一些限制)。请参阅Microsoft 文档。
因此,您的陈述可以简化为:
public async Task<Parent> GetParent(int id)
{
return await context.Parents
.Include(p => p.Children.OrderBy(c => c.Sequence))
.SingleOrDefaultAsync(p => p.Id == id);
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这是 EF Core 向前迈出的一大步。
您尝试返回的结果是子项的有序列表。那不是你想要的。而是对子项进行排序,然后返回父项:
public async Task<Parent> GetParent(int id)
{
var parent = context.Parents
.Include(p => p.Children)
.SingleOrDefaultAsync(p => p.Id == id);
parent.Result.Children = parent.Result.Children.OrderBy(c => c.Sequence).ToList();
return await parent;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6172 次 |
| 最近记录: |