当前位置: 首页 > 编程语言 > C#

实体框架顺序包含分享

时间:2023-04-11 01:36:53 C#

实体框架顺序包含我想试试类似下面的东西:_dbmsParentSections=FactoryTools.Factory.PdfSections.Include(x=>x.Children.OrderBy(y=>y.Order).ToList()).Include(x=>x.Hint).Include(x=>x.Fields).Where(x=>x.FormId==FormId&&x.Parent==null).OrderBy(o=>o.Order).ToList();导致异常的部分是:.Include(x=>x.Children.OrderBy(y=>y.Order).ToList())编辑:进一步观察后,_dbmsParentSections.ForEach(x=>x.Children=x.Children.OrderBy(y=>y.Order).ToList());为我完成了这项工作(在最初的工厂电话之后,没有Children.OrderBy)。您似乎无法在查询中对子集合进行排序。在查询后排序或在第二个查询中加载子键。类似的问答在这里扩展方法Include只是DbQuery.Include的包装器。在内部它不执行表达式而只解析它们,即它获取它们的成员表达式并将它们转换为字符串形式的路径。此路径用作DbQuery.Include输入。之前已请求增强Include的功能,例如通过包含Where子句以允许部分加载的集合。订购可能是另一个变更请求。但正如您所见,由于Include的内部工作原理,必须重新设计整个机制才能实现此类增强功能。我在当前的路线图上看不到它,所以可能需要一段时间……它永远不会奏效。EFinclude尝试理解所有内容并将其转换为SQL,但您希望从中得到很多。加载所有实体而不进行排序和.ToList()-并为IEnumerable编写扩展方法以获得有序结果。通常,如果您使用一堆包含,那是因为您需要访问视图中的子属性。当我需要在视图中访问它时,我所做的就是对子集合进行排序。例如,我可能会为主/从表单构建一些包含语句。排序在原始EF查询中没有意义。相反,为什么不在实际访问时在视图级别对这些子记录进行排序?我可能会针对多个调查问题进行调查。当我将模型子集合的集合传递给局部视图时,如果我想在局部视图级别以特定顺序呈现问题。@Html.Partial("_ResponsesPartial",Model.SurveyResponses.OrderBy(x=>x.QuestionId))您不应将IQueryable类型转换为IEnumerable并调用Include,因为IEnumerable类型不支持Include。简而言之,永远不要在ToList之后调用Include。以上就是《C#学习教程:实体框架序》包含的全部分享内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注—IQueryable=serversidecall(SQL)IEnumerable=clientside(loadedinmemory)本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: