c# -如何使用LINQ从数据表中获取一个不同的、有序的名称列表?

Translate

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

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

为什么orderby不被执行?

This question and all comments follow the "Attribution Required."

所有的回答

Translate

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

  1. 首先,将您的数据选择到一个新列表中,我们称之为x1,根据需要进行投影
  2. 接下来,从x1进入x2,使用您需要的任何区别
  3. 最后,从x2进入x3,按您的意愿排序
来源
Bob
Translate

问题在于Distinct运算符不授予其将保持值的原始顺序的权利。

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

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );
来源
Hobart Lee
Translate
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
来源
Translate

尝试以下方法:

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

尝试以下

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

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

来源
Translate

概括地说:所有答案都有一些共同点。

OrderBy必须是最终操作。

来源
Translate

您可以使用类似这样的方法:

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