如何使用LINQ从数据表中获得不同的,有序的名称列表?

Asked
Viewd25119

104

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

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

为什么orderby不被强制执行?

7 个答案

37

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

  1. 首先,将数据选择到新列表中,我们将其命名为x1,并根据需要进行投影
  2. 接下来,使用您需要的任何区别创建一个从x1x2的独特列表
  3. 最后,创建一个从x2x3的有序列表,按您想要的顺序排序
3

尝试以下

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

这应该可以满足您的需求。

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

问题在于区别 运营商不同意 保持原始顺序 值。

因此您的查询将需要像这样

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