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

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

为什么orderby没有被强制执行?

===============>>#1 票数:52

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

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

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

===============>>#2 票数:33 已采纳

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

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

===============>>#3 票数:8

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

===============>>#4 票数:5

试试以下内容:

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

===============>>#5 票数:1

请尝试以下方法

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

这应该适合您的需要。

===============>>#6 票数:0

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

OrderBy需要成为最后的操作。

===============>>#7 票数:0

你可以使用这样的东西:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);

  ask by Bob translate from so

未解决问题?本站智能推荐:

关注微信公众号