gpt4 book ai didi

c# - 如何在 lambda 表达式中使用子集合进行 OrderBy

转载 作者:太空宇宙 更新时间:2023-11-03 14:00:34 24 4
gpt4 key购买 nike

我有一个使用 lambda 表达式的查询,我希望能够从作为父表的子集合的表中的列进行排序。查询如下所示:

 var query = ctx.Timelines.Include("Rule.DocumentRules").Where(...).OrderBy(o => o.Rule.DocumentRules.OrderBy(t => t.SortOrder));

SortOrder 列位于时间线实体下方的 3 层深处,我不知道使用哪个扩展程序来访问它。当我使用上面的代码时,出现错误“DbSortClause 表达式必须具有顺序可比的类型。参数名称:key”。如果我使用 Select 扩展而不是第二个 OrderBy,我会得到同样的错误。有谁知道我如何按此列排序?此“SortOrder”列不是主键或外键。

谢谢

最佳答案

我知道这是一个旧线程,但我遇到了这个帖子,因为我遇到了同样的问题,因为它没有答案,我想我会分享我的解决方案,以防它帮助到其他人。

假设您需要显示实际的 parent (即...妈妈/爸爸)和他们的 child ,但您想在报告中按字母顺序显示 child 的名字。如果它们在数据库中的顺序不正确,则必须通过子表上的“名称”字段对其进行排序,以便根据需要显示它们。

按预期工作的简单 T-SQL 示例:

select * from ParentTable p
inner join ChildTable c on c.ParentId = p.ParentId
where p.ParentId = 1
order by c.Name

我曾尝试以与原始发布者相同的方式完成此操作(如下所示)并得到“DbSortClause 表达式必须具有可比较顺序的类型”异常。

.OrderBy(x => x.ParentTable.ChildTable.OrderBy(y => y.Name))

我正在使用投影,所以这可能不适用于所有人,但我发现,如果我在子列表的投影内执行 OrderBy,它也能按我的要求工作。

Children = x.ParentTable.ChildTable.OrderBy(y => y.Name).Select(aa => new ChildTableModel

很可能有更好/不同的方法来实现这一点,但这是我想要的,所以我想我会分享。

关于c# - 如何在 lambda 表达式中使用子集合进行 OrderBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10823928/

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