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

onon 发布于 2018-02-02 c# 最后更新 2018-02-02 11:41 868 浏览

假设我有DataTableName列。我想要收集按字母顺序排列的唯一名称。以下查询忽略了order by子句。

var names =
    (from DataRow dr in dataTable.Rows
    orderby (string)dr["Name"]
    select (string)dr["Name"]).Distinct();
为什么orderby没有得到执行?
已邀请:

onon

赞同来自:

问题在于不同  运营商不会授予它  保持原来的秩序  values. 所以你的查询将需要这样工作

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

yet

赞同来自:

尝试以下

var names = (from dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy(name => name);
这应该为你所需要的。

hculpa

赞同来自:

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

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

funde

赞同来自:

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

xminus

赞同来自:

试试以下内容:

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