我有一個如下所示的資料表:
IDDOC DOCNAME
1 mydoc1
153 mydoc2
98 mydoc3
1327 mydoc4
241 mydoc5
我想找到一種方法,通過基于特定的 ID 序列來重新排序該資料表中的行
例如,對于這樣的序列:1327,98,1,預期的輸出將是:
IDDOC DOCNAME
1327 mydoc4
98 mydoc3
1 mydoc1
153 mydoc2 (not in my sequence so this row comes at the end)
241 mydoc5 (not in my sequence so this row comes at the end)
我正在考慮創建一個新的空資料庫并添加帶有 IDDOC 的行,然后是第二個,然后是序列中的第三個,最后是我的序列中不存在的所有行,但我想知道是否已經存在更清晰的東西。非常感謝您的幫助!
uj5u.com熱心網友回復:
您可以使用這種方法:
dt = dt.AsEnumerable()
.OrderBy(r => r.Field<int>("IDDOC") == 1327 ? 0 : 1)
.ThenBy(r => r.Field<int>("IDDOC") == 98 ? 0 : 1)
.ThenBy(r => r.Field<int>("IDDOC") == 1 ? 0 : 1)
.CopyToDataTable();
如果您想要一個動態的 id 串列,并且DataTable應該按以下順序排序:
List<int> docIdSequence = new List<int>{ 1327, 98, 1 };
dt = dt.AsEnumerable()
.OrderBy(r => {
int ix = docIdSequence.IndexOf(r.Field<int>("IDDOC"));
return ix >= 0 ? ix : int.MaxValue;
})
.CopyToDataTable();
請注意,CopyToDataTable如果沒有輸入,則會引發例外DataRows。因此,您必須dt.Rows.Count > 0在使用上述代碼之前檢查是否。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/405343.html
標籤:
上一篇:在不修改元素、不使用輔助陣列或不使用任何內置函式的情況下對具有重復值的陣列進行排序
下一篇:在已排序的串列中添加或移動元素
