2008-08-01 82 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需要是最后的操作。

相关问题