2014-09-25 213 views
0

我在DataTable中獲取記錄的集合並將其綁定到網格控件。在綁定它之前,我正在基於幾個條件對數據進行排序。爲了簡潔起見,我將解釋一個測試場景。DataTable - 使用Lambda表達式的動態Linq OrderBy

我有兩個字段分類和國家。我想先根據類別和國家對記錄進行排序。但這裏的問題是我想將所有空的類別值推到最後,然後根據字母順序進行排序。

對於我正在做的 -

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表達式根據字段動態排序記錄? (推空值到最後)

回答

1

我假設你所說的數組是字符串數組。

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使用延遲執行,您的查詢不會被評估,直到你真的需要結果。這就是爲什麼你可以像上面的例子一樣在多個步驟中構建它。

+0

完美。我已經嘗試過,但由於某種原因,我在ThenBy附近收到了一個sytax錯誤。現在很好。 – NLV 2014-09-26 14:52:22