簡體   English   中英

DataTable-使用Lambda表達式的動態Linq OrderBy

[英]DataTable - Dynamic Linq OrderBy using Lambda expressions

我正在收集數據表中的記錄並將其綁定到網格控件。 在綁定它之前,我將根據幾種條件對數據進行排序。 為簡便起見,我將解釋一個測試方案。

我有兩個字段類別和國家。 我想首先根據類別對記錄進行排序,然后再按國家/地區分類。 但是這里要注意的是,我想將所有空類別值推到最后,然后根據字母順序進行排序。

為此,我正在做-

var rows = dt.AsEnumerable()
        .OrderBy(r => string.IsNullOrEmpty(Convert.ToString(r["Category"]))) //push empty values to bottom
        .ThenBy(r => Convert.ToString(r["Category"]))
        .ThenBy(r => Convert.ToString(r["Country"]))

但是現在,我需要根據其排序的字段是動態的,我在數組中擁有這些字段。

如何使用Lambda表達式基於字段動態排序記錄? (將空值推到最后)

我假設您正在談論的數組是一個字符串數組。

var columns = new string[] { "Category", "Country" };

var rows = dt.AsEnumerable().OrderBy(x => 0);
foreach(var columnName in columns)
{
    rows = rows.ThenBy(r => string.IsNullOrEmpty(Convert.ToString(r[category])))
               .ThenBy(r => Convert.ToString(r[category]));
}

由於LINQ使用延遲執行,因此只有在您真正需要結果之前,您的查詢才會被評估。 這就是為什么您可以像上面的示例一樣分多個步驟構造它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM