[英]Sorting with OrderBy, ThenBy
我正在嘗試根據先前排序的列對表的幾列進行排序。 它適用於前兩列。 但是一旦我排序第三列,第二列就會失去它的排序。 據我所知,我的foreach循環一定存在問題。 這是我的排序代碼:
public List<object> inhaltSortieren(List<object> zuSortierendeListe, Dictionary<string, SortierRichtung> sortierung)
{
IOrderedEnumerable<object> sortierteListe = null;
if (sortierung.First().Value == SortierRichtung.asc)
sortierteListe = zuSortierendeListe.OrderBy(x => x.GetType().GetProperty(sortierung.First().Key).GetValue(x, null));
else if (sortierung.First().Value == SortierRichtung.desc)
sortierteListe = zuSortierendeListe.OrderByDescending(x => x.GetType().GetProperty(sortierung.First().Key).GetValue(x, null));
bool first = true;
foreach (KeyValuePair<string, SortierRichtung> spalte in sortierung)
{
if (first)
{
first = false;
continue;
}
if (spalte.Value == SortierRichtung.asc)
sortierteListe = sortierteListe.ThenBy(x => x.GetType().GetProperty(spalte.Key).GetValue(x, null));
else if (spalte.Value == SortierRichtung.desc)
sortierteListe = sortierteListe.ThenByDescending(x => x.GetType().GetProperty(spalte.Key).GetValue(x, null));
}
return sortierteListe.ToList();
}
有任何想法嗎?
更新:也許我添加了一些更多信息:
對象本身是Tabledata的列表
你傳入一本Dictionary
; 當你將它作為IEnumerable<KeyValuePair>
(正如你的foreach
循環那樣)使用它從Dictionary
獲取值的順序(可能) 不是你添加它們的順序!
您需要使用List<KeyValuePair>
(或其他一些有序的 IEnumerable<KeyValuePair>
)而不是Dictionary
,或者甚至創建一個自定義類來保存字段和方向並傳遞List
of that。
還看看這里
只是為了讓你的代碼更清晰一些。 您可以將所有內容放入for-each循環中或保持原樣,但在代碼中使用sortierung.Skip(1),因為您已經使用了第一個條目。 我還根據之前的評論將Dictionary參數更改為IEnumerable>。
object GetValue(object value, string name)
{
return value.GetType().GetProperty(name).GetValue(value, null);
}
public List<object> SortContent(List<object> listToSort, Tuple<string, SortDirection>[] sortInfos)
{
if (sortInfos == null || sortInfos.Length == 0)
return listToSort;
IOrderedEnumerable<object> sortedList = null;
foreach (var column in sortInfos)
{
Func<object, object> sort = x => GetValue(x, column.Key);
bool desc = column.Value == SortDirection.Descending;
if (sortedList == null)
sortedList = desc ? listToSort.OrderByDescending(sort) : listToSort.OrderBy(sort);
else
sortedList = desc ? sortedList.ThenByDescending(sort) : sortedList.ThenBy(sort);
}
return sortedList.ToList();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.