我有一个 DataTable 与一个 Name 柱子。我想生成按字母顺序排列的唯一名称的集合。以下查询忽略 订购依据 条款。

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

为什么 orderby 不被强制执行?

有帮助吗?

解决方案

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

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

其他提示

问题在于,不同的操作员并未确定它将维护原始价值顺序。

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

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

尝试以下操作:

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

尝试以下操作

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

这应该适合你的需要。

抽象一下:所有的答案都有一些共同点。

OrderBy 需要是最终操作。

你可以使用类似的东西:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top