【问题标题】:How do I get a distinct, ordered list of names from a DataTable using LINQ?如何使用 LINQ 从 DataTable 中获取不同的有序名称列表?
【发布时间】:2010-09-05 05:31:49
【问题描述】:

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

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

为什么orderby 没有得到执行?

【问题讨论】:

    标签: c# linq .net-3.5


    【解决方案1】:

    问题在于 Distinct 运营商不同意它将 维持原有秩序 值。

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:
        var sortedTable = (from results in resultTable.AsEnumerable()
        select (string)results[attributeList]).Distinct().OrderBy(name => name);
        

        【讨论】:

          【解决方案4】:

          尝试以下方法:

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

          【讨论】:

            【解决方案5】:

            试试下面的

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

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

            【讨论】:

              【解决方案6】:

              抽象:所有答案都有共同点。

              OrderBy 需要是最后的操作。

              【讨论】:

                【解决方案7】:

                你可以使用类似的东西:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多