asp.net – List的实现正在丢失原始查询的排序
发布时间:2020-12-16 03:16:14 所属栏目:asp.Net 来源:网络整理
导读:使用Entity Framework我有一个IQueryable用于数据库对象Meeting,e是DbContext. IQueryableMeeting meetings = e.Meetings .Include(m = m.MeetingStage) .Include(m = m.MeetingType) 此查询已应用OrderBy. 然后我想从这个查询中选择一个新对象MeetingSearch
使用Entity Framework我有一个IQueryable用于数据库对象Meeting,e是DbContext.
IQueryable<Meeting> meetings = e.Meetings .Include(m => m.MeetingStage) .Include(m => m.MeetingType) 此查询已应用OrderBy. 然后我想从这个查询中选择一个新对象MeetingSearchResult.但是,我发现在某些情况下,正在改变排序,正如这些测试所证明的那样 var temp2 = sortedMeetings.Select(m => m.MeetingID); System.Diagnostics.Debug.WriteLine(string.Join(" / ",temp2.ToList().ToArray())); var temp4 = sortedMeetings.Select(m => new MeetingSearchResult() { MeetingID = m.MeetingID,CompanyName = m.CompanyName }); System.Diagnostics.Debug.WriteLine(string.Join(" / ",temp4.ToList().Select(m => m.MeetingID).ToArray())); var temp8 = sortedMeetings.Select(m => new MeetingSearchResult() { MeetingID = m.MeetingID,CompanyName = m.CompanyName,MeetingDate = m.MeetingDate,MeetingStage = m.MeetingStage.Description }); System.Diagnostics.Debug.WriteLine(string.Join(" / ",temp8.ToList().Select(m => m.MeetingID).ToArray())); 这里调试器的输出是: 2493 / 4228 / 7029 / 8254 / 9375 / 10563 / 11716 / 10500 2493 / 4228 / 7029 / 8254 / 9375 / 10563 / 11716 / 10500 2493 / 4228 / 7029 / 8254 / 9375 / 10500 / 10563 / 11716 temp8中对象的顺序已更改.有谁能解释一下? 更多信息: 人们已经要求提供有关sortedMeetings的更多信息. var sortedMeetings = meetings.DoMeetingSort(sort,ascending); 我的扩展DoMeetingSort如下.我删除了不适用的开关案例: public static IQueryable<Meeting> DoMeetingSort(this IQueryable<Meeting> query,Constants.MeetingSortColumn column,bool ascending) { switch (column) { case Constants.MeetingSortColumn.MeetingType: return ascending ? query.OrderBy(m => m.MeetingType.Description).ThenBy(m => m.MeetingDate).ThenBy(m => m.CompanyName) : query.OrderByDescending(m => m.MeetingType.Description).ThenByDescending(m => m.MeetingDate).ThenByDescending(m => m.CompanyName); } } 解决方法
导致这种情况发生的原因有很多,但是从您的样本中可能最有可能是由于底层数据库决定了这一点.
我假设您的sortedMeetings仍然是IQueryable,因此查询仍在构建中.当您包含其他列并调用ToList()时,您正在对您的数据库引擎执行不同的查询,并且它可能决定使用另一个索引,或者只是您查询的另一个路径.如果您正在使用Sql Server,请对您的查询进行概要分析并查看执行计划,但仍然按照您的要求使用订单,这是您唯一的保证. 但是使用OrderBy呈现sortedMeetings以进行完整分析. 编辑: 此外,似乎原始IQueryable不相同:temp2派生drom sortedMeetings,temp4和temp8来自temp.此外,如果您使用的是EF6,请使用context.Database.Log转储查询,否则请使用数据库探查器.在这里发布数据库查询,我们帮助您分析它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-3 – 使用razor设置knockout viewmodel的初始值
- asp.net-mvc-4 – 如何在浏览器窗口调整大小时调整带有边框
- asp.net-mvc – 错误System.Web.HttpCompileException(0x80
- 如何以编程方式设置ASP.NET ReportViewer控件的数据源?
- asp.net – 尝试设置此报告中未定义的报告参数“名称”?
- ASP.NET C#在SQL Server数据库表中搜索
- asp.net-mvc-3 – 将WebForms中的MVC3与大型现有的自定义控
- asp.net – 从SyndicationContent读取内容文本
- ASP.NET Core MVC的Razor视图中,使用Html.Raw方法输出原生
- asp.net-mvc – ASP.NET MVC身份默认实现
推荐文章
站长推荐
- asp.net-mvc – ServiceStack.Factor模块列表中有
- asp.net – 问题设置cookie到期DateTime.Max(999
- 在对ASP.NET MVC Action的AJAX请求期间有网络请求
- asp.net-mvc-3 – MVC3下拉列表未选择所选项目
- asp.net-mvc – MVC4 Razor对大括号感到困惑
- asp.net – 偶尔获取SqlException:超时过期
- asp.net – 如何在asp:GridView中启用就地编辑?
- 如何使用Velocity设计ASP.NET MVC站点进行缓存?
- asp.net-membership – 如何让所有用户都参与角色
- asp.net-mvc – 在MVC的路由中,花括号是什么意思
热点阅读