【发布时间】:2014-03-09 05:52:18
【问题描述】:
使用实体框架我有一个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);
}
}
【问题讨论】:
-
您是否尝试通过调用 .ToList() 来枚举结果?你为什么要尝试通过代理键订购任何东西?
-
如何申请OrderBy?
temp是什么?生成了哪些查询? -
是否有索引应用于
Meetings表? select 中的另一个 set 字段可能意味着 DB 使用的另一个索引,这可能意味着另一个 order。 -
什么是 sortedMeetings?
-
添加了更多关于什么是 sortedMeetings 的信息。除了主键 MeetingID 之外,Meetings 表没有索引。
标签: asp.net linq entity-framework linq-to-entities