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

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

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

为什么 orderby 未得到强制执行?

0
额外 编辑
意见: 14

5 答案

问题在于不同  运营商不会授予它  保持原来的顺序  值。</强>

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

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

尝试以下操作

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

这应该适用于你所需要的。

0
额外

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

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

试试以下内容:

dataTable.Rows.Cast().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
0
额外

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

OrderBy需要是最后的操作。

0
额外