2008-08-01 83 views
80

我有一個DataTableName列。我想生成按字母順序排列的唯一名稱的集合。以下查詢忽略訂單由子句。如何使用LINQ從DataTable獲取獨特的有序名稱列表?

var names = 
    (from DataRow dr in dataTable.Rows 
    orderby (string)dr["Name"] 
    select (string)dr["Name"]).Distinct(); 

爲什麼orderby沒有得到執行?

回答

29

爲了使其更具可讀性和可維護性,您還可以將其拆分爲多個LINQ語句。

  1. 首先,選擇您的數據到一個新的列表,我們稱之爲x1,怎麼做,如果需要的
  2. 接下來,創建一個獨特的名單,從x1x2投影,使用自己需要的任何區別
  3. 最後創建一個有序列表,從x2爲,通過排序任何你想要
50

問題是含混 經營者不授予其將 保持 值的原始順序。

所以,你的查詢將需要這樣

var names = (from DataRow dr in dataTable.Rows 
      select (string)dr["Name"]).Distinct().OrderBy(name => name); 
1

工作請嘗試以下

var names = (from dr in dataTable.Rows 
      select (string)dr["Name"]).Distinct().OrderBy(name => name); 

這應該對你所需要的工作。

7
var sortedTable = (from results in resultTable.AsEnumerable() 
select (string)results[attributeList]).Distinct().OrderBy(name => name); 
3

嘗試了FO如下:

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name); 
0

摘要:所有的答案都有一些共同之處。

OrderBy需要是最後的操作。

相關問題