我有一個DataSet
包含一列,稱其爲Type
其中包含ints。我使用LINQ來操作DataSet
,我想按Type
排序。 Type
列現在僅包含3個值(1,2,3)。我想排序,以便Type
2首先在列表中,然後是1和3.LINQ OrderBy有一個例外
是否有一個簡單的解決方案,或者我將不得不自定義OrderBy?
我有一個DataSet
包含一列,稱其爲Type
其中包含ints。我使用LINQ來操作DataSet
,我想按Type
排序。 Type
列現在僅包含3個值(1,2,3)。我想排序,以便Type
2首先在列表中,然後是1和3.LINQ OrderBy有一個例外
是否有一個簡單的解決方案,或者我將不得不自定義OrderBy?
幾個解決方案:
table.AsEnumerable()
.OrderBy(r => r.Field<int>("Type")==2 ? 0 : 1)
.ThenBy(r => r.Field<int>("Type"));
或可能更好
table.AsEnumerable().
OrderBy(r => r.Field<int>("Type")==2
? 0
: r => r.Field<int>("Type"))
或也優雅添Schmelter的解決方案
table.AsEnumerable()
.OrderByDescending(r => r.Field<int>("Type")==2)
.ThenBy(r => r.Field<int>("Type"))
優勢或添Schmelter的解決方案:你不是取決於「僞價值」。
在兩個第一個解決方案中,我們聲明0是((該字段的最小可能值)-1)。
這是真的嗎,它可以改變,我們不知道。
+1 - 我會選擇第二個選項。 – RedFilter
而不是pseeudocode我會添加實際代碼:'table.AsEnumerable()。OrderByDescending(r => r.Field
@TimSchmelter爵士是的,先生;) –
爲了讓我刪除,我們從數據表開始的事實,樣品簡單,它只是一個細節,我想我們可以做到這一點:
var list = new [] { 1, 3, 5, 2, 4, 6, 9, 8 };
var sorters = new [] { 3, 2, -1 };
var o = from s in sorters
from l in list.OrderBy(x => x)
where s == l || (s == -1 && !sorters.Contains(l))
select l;
排序數組包含首選分揀機,這種方式如果我們需要它們,我們可以有多個,然後有一個'快樂'(-1)代表分揀機的結束。快樂可以以更好的方式處理,就像給你想法一樣。此時該算法是通用的,不需要對首選值進行任何硬編碼檢查(只是快樂)。
存在一些潛在的低效率問題,但我只想說明這個解決方案的總體思路,以及更多的工作可以更有效地完成。
在這裏你有5種方法來完成這一點。這是一篇關於如何設置價值作爲第一個訂單,然後扔在那些較低,並在高於所選的所以如果你有{1 2 3 4 5 6}
和選擇項目,輸出:{4 1 2 3 5 6}
..我更喜歡我自己的答案,但..^_^
的可能重複[LINQ的排序依據針對特定值(http://stackoverflow.com/questions/728319/linq-orderby-against-specific-values) – James