关于c#:如何使用LINQ从DataTable获取一个独特的,有序的名称列表?

关于c#:如何使用LINQ从DataTable获取一个独特的,有序的名称列表?

How do I get a distinct, ordered list of names from a DataTable using LINQ?

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

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

为什么不强制执行orderby


问题是运营商不同意维持原订单价值观。

所以您的查询需要这样工作

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

为了使它更易于阅读和维护,您还可以将其拆分为多个LINQ语句。

  • 首先,将您的数据选择到一个新的列表中,我们称之为x1,如果需要,进行投影。
  • 接下来,创建一个不同的列表,从x1x2,使用您需要的任何区别
  • 最后,创建一个有序的列表,从x2x3,按您想要的排序

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

    尝试以下操作:

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

    尝试以下操作

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

    这应该能满足你的需要。


    您可以使用类似的方法:

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


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

    orderby必须是最终操作。


    推荐阅读