Mit Entity Framework habe ich ein IQueryable
für ein Datenbankobjekt Meeting
und e
ist der DbContext
.
IQueryable meetings = e.Meetings
.Include(m => m.MeetingStage)
.Include(m => m.MeetingType)
Dieser Abfrage wurde OrderBy
angewendet.
Dann möchte ich aus dieser Abfrage in ein neues Objekt MeetingSearchResult
auswählen. Allerdings stelle ich fest, dass in bestimmten Fällen die Reihenfolge geändert wird, wie diese Tests zeigen
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()));
Die Ausgabe der Debuggers hier ist:
2493 / 4228 / 7029 / 8254 / 9375 / 10563 / 11716 / 10500
2493 / 4228 / 7029 / 8254 / 9375 / 10563 / 11716 / 10500
2493 / 4228 / 7029 / 8254 / 9375 / 10500 / 10563 / 11716
Die Reihenfolge der Objekte in temp8 hat sich geändert. Kann jemand das erklären?
Weitere Informationen:
Leute haben nach mehr Informationen darüber gefragt, was sortedMeetings
ist.
var sortedMeetings = meetings.DoMeetingSort(sort, ascending);
Meine Erweiterung DoMeetingSort
folgt. Ich habe die switch cases entfernt, die hier nicht zutreffen:
public static IQueryable DoMeetingSort(this IQueryable 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);
}
}