如何使用LINQ从DataTable获取不同的,有序的名称列表?

Bob 92 c# linq .net-3.5

我有DataTable一个Name专栏.我想生成按字母顺序排列的唯一名称的集合.以下查询忽略order by子句.

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

为什么不orderby加强执行?

Bob.. 53

问题是,Distinct运算符不会授予它将保持原始值的顺序.

所以你的查询需要像这样工作

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


a7drew.. 32

为了使其更具可读性和可维护性,您还可以将其拆分为多个LINQ语句.

  1. 首先,将您的数据选择到一个新列表中,让我们调用它x1,根据需要进行投影
  2. 接下来,创建一个独特的名单,从x1进入x2,使用自己需要的任何区别
  3. 最后,创建一个有序列表,从中x2进行x3排序,按任意方式排序


用户甲.. 8

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


用户甲.. 5

试试以下内容:

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