如何使用LINQ从DataTable获得独特的有序名称列表?

比方说,我有一个NameDataTable 。 我想要收集按字母顺序排列的唯一名称。 以下查询忽略了order by子句。

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

为什么orderby不被强制执行?

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

  1. 首先,将您的数据select到一个新列表中,我们称之为x1 ,如果需要的话进行投影
  2. 接下来,创build一个不同的列表,从x1x2 ,使用任何你需要的区别
  3. 最后,创build一个有序的列表,从x2x3 ,按您的意愿进行sorting

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

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

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

试试以下内容:

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

尝试以下

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

这应该为你所需要的。