如何使用LINQ从DataTable获得独特的有序名称列表?
比方说,我有一个Name
列DataTable
。 我想要收集按字母顺序排列的唯一名称。 以下查询忽略了order by子句。
var names = (from DataRow dr in dataTable.Rows orderby (string)dr["Name"] select (string)dr["Name"]).Distinct();
为什么orderby
不被强制执行?
为了使其更具可读性和可维护性,您还可以将其拆分为多个LINQ语句。
- 首先,将您的数据select到一个新列表中,我们称之为
x1
,如果需要的话进行投影 - 接下来,创build一个不同的列表,从
x1
到x2
,使用任何你需要的区别 - 最后,创build一个有序的列表,从
x2
到x3
,按您的意愿进行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);
这应该为你所需要的。