C# 如何在Linq中对嵌套集合进行排序
我有如下实体模型: 表单>表单响应>表单项>表单项类型C# 如何在Linq中对嵌套集合进行排序,c#,linq,sorting,nested,entity,C#,Linq,Sorting,Nested,Entity,我有如下实体模型: 表单>表单响应>表单项>表单项类型 表单可以有多个FormResponse,但每个FormResponse可以有一个FormItem,FormItem可以有一个FormItem类型 我正在尝试获取所有表单,这些表单的响应都是按FormItem.ItemOrder字段排序的。所以,这个问题是关于排序的 下面是我的尝试,但我对ToList的评估表示怀疑,我从中得到的答案是什么。这是否意味着将为每个表单评估FormResponses?也就是说,查询速度会非常慢。有没有更有效的方法来
表单可以有多个FormResponse,但每个FormResponse可以有一个FormItem,FormItem可以有一个FormItem类型 我正在尝试获取所有表单,这些表单的响应都是按FormItem.ItemOrder字段排序的。所以,这个问题是关于排序的 下面是我的尝试,但我对ToList的评估表示怀疑,我从中得到的答案是什么。这是否意味着将为每个表单评估FormResponses?也就是说,查询速度会非常慢。有没有更有效的方法来写下面的语句 尝试删除ToList求值,在这种情况下,我得到的错误是IOrderedEnumerable无法转换为ICollection
谢谢如果您希望此查询高效,只需删除一个可计算的调用即可。然后,与其在LINQto对象中完成所有这些工作,不如在数据库方面完成这些工作
当然,这项工作仍然需要完成,因为您已经给自己一个约束,即您的最终输出是一个包含项目列表的项目列表。鉴于该要求,无法避免对外部集合中每个项目的每个子集合中的所有项目进行排序。表单可以有多个FormResponse,但每个FormResponse可以有一个FormItem,FormItem可以有一个FormItem类型
您可以将FormItem和FormItemType合并到FormResponse我尝试删除一个可计算的,但在声明该实体或复杂类型MyModel时出错。无法在LINQ to Entities中构造表单query@bobetko然后在EF查询中构造一个匿名类型,然后将其复制到内存中的表单。
var forms = db.Forms
.AsEnumerable()
.Select(p => new Form
{
Name = p.Name,
FormResponses = p.FormResponses.
.OrderBy(i => i.FormItem.ItemOrder)
.ToList(),
OrderNumber = p.OrderNumber
})
.ToList();