【问题标题】:Select distinct rows from datatable in Linq从 Linq 中的数据表中选择不同的行
【发布时间】:2010-07-14 02:05:40
【问题描述】:

我正在尝试基于多列(attribute1_name、attribute2_name)获取不同的行,并使用 Linq-to-Dataset 从数据表中获取数据行。

我想要这样的结果

attribute1_name    attribute2_name
--------------     ---------------

Age                State
Age                weekend_percent
Age                statebreaklaw
Age                Annual Sales
Age                Assortment

如何做瘦Linq-to-dataset?

【问题讨论】:

    标签: c# vb.net linq linq-to-dataset


    【解决方案1】:

    如果它不是类型化的数据集,那么您可能想要使用 Linq-to-DataSet 扩展方法执行以下操作:

    var distinctValues = dsValues.AsEnumerable()
                            .Select(row => new {
                                attribute1_name = row.Field<string>("attribute1_name"),
                                attribute2_name = row.Field<string>("attribute2_name")
                             })
                            .Distinct();
    

    确保您的代码开头有 using System.Data; 语句,以启用 Linq-to-Dataset 扩展方法。

    希望这会有所帮助!

    【讨论】:

    • 我在那里使用了 attribute1_name 我得到了重复的记录
    • @above 你应该在 row.Field 期间使用“row”...我在另一个循环中使用了一些其他数据行对象,这产生了重复的值。后来我更正了。
    • 如果一行中有 4 列并且您想根据 2 列进行区分怎么办?
    • 我如何为列attribute2_name 添加OrderBy
    【解决方案2】:

    像这样:(假设一个类型化的数据集)

    someTable.Select(r => new { r.attribute1_name, r.attribute2_name }).Distinct();
    

    【讨论】:

    • 你还需要调用 AsEnumerable() 吗?
    • @Justin:不适用于类型化数据集。类型化数据集中的表继承TypedTableBase&lt;TRow&gt;,实现IEnumerable&lt;TRow&gt;
    • 请告诉我...如何迭代它们
    • @James: foreach(var pair in ...)
    【解决方案3】:
    var Test = (from row in Dataset1.Tables[0].AsEnumerable()
                select row.Field<string>("attribute1_name") + row.Field<int>("attribute2_name")).Distinct();
    

    【讨论】:

      【解决方案4】:

      查看此链接

      get distinct rows from datatable using Linq (distinct with mulitiple columns)

      或者试试这个

      var distinctRows = (from DataRow dRow in dTable.Rows
                          select new  {  col1=dRow["dataColumn1"],col2=dRow["dataColumn2"]}).Distinct();
      

      编辑:放置丢失的第一个花括号。

      【讨论】:

      • @SLaks - 花括号应该放在哪里?
      • @MAW74656:围绕匿名类型。
      【解决方案5】:
      Dim distinctValues As List(Of Double) = (From r In _
      DirectCast(DataTable.AsEnumerable(),IEnumerable(Of DataRow)) Where (Not r.IsNull("ColName")) _
      Select r.Field(Of Double)("ColName")).Distinct().ToList()
      

      【讨论】:

      • 欢迎来到 Stack Overflow!您是否会考虑添加一些叙述来解释为什么此代码有效,以及是什么使它成为问题的答案?这对提出问题的人以及其他任何出现的人都非常有帮助。
      【解决方案6】:

      我们可以得到类似于下面示例的 distinct

       //example
                 var  distinctValues =  DetailedBreakDown_Table.AsEnumerable().Select(r => new
                  {
                      InvestmentVehicleID = r.Field<string>("InvestmentVehicleID"),
                      Universe = r.Field<string>("Universe"),
                      AsOfDate = _imqDate,
                      Ticker = "",
                      Cusip = "",
                      PortfolioDate = r.Field<DateTime>("PortfolioDate")
      
                  } ).Distinct();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-06
        • 1970-01-01
        • 1970-01-01
        • 2010-11-12
        • 1970-01-01
        相关资源
        最近更新 更多