【问题标题】:How to LINQ DataTable with group by and order by to deduplicate data如何使用 group by 和 order by LINQ DataTable 以删除重复数据
【发布时间】:2021-09-02 11:50:03
【问题描述】:

我有以下数据表

Col1 Col2 Col3
A B 1
A B 2
A C 1

Col1Col2 是唯一键,因此第一行和第二行是重复的。 Col3 不同,所以我想有一个选项来设置要选择哪一行的条件。例如,条件可以是在 Col3 最大的地方分组行。结果是。

Col1 Col2 Col3
A B 2
A C 1

如何为此使用 LINQ?我尝试了以下变化

数据表设置

var datatable = new DataTable();
            
datatable.Columns.Add("Col1");
datatable.Columns.Add("Col2");
datatable.Columns.Add("Col3");

// this row should not be in the result
var row1 = datatable.NewRow(); 
row1.ItemArray = new[] { "A", "B", "1" };
datatable.Rows.Add(row1);

var row2 = datatable.NewRow();
row2.ItemArray = new[] { "A", "B", "2" };
datatable.Rows.Add(row2);

var row3 = datatable.NewRow();
row3.ItemArray = new[] { "A", "C", "1" };
datatable.Rows.Add(row3);

查询尝试

可以是查询表达式,也可以是基于流利的,没关系。

var result =
from record in datatable.AsEnumerable()
group record by new { record.Field<string>("Col1"), record.Field<string>("Col2") } into g
let row =
(
     from groupedItem in groupedItems
     order by groupedItem.Field<string>("Col3") desc
     select groupedItem
).First()
select row;

当有 record.Field 时,我得到一个异常

无效的匿名类型成员声明器

我对复杂的 LINQ 查询没有经验,我该如何解决?

【问题讨论】:

    标签: c# linq grouping linq-to-objects


    【解决方案1】:

    编译器似乎无法推断出数据表中列的类型,请尝试在匿名属性中命名它们,例如:

     group record by new 
                     { 
                        Col1 = record.Field<string>("Col1"),
                        Col2 = record.Field<string>("Col2") 
                     }
    

    【讨论】:

      【解决方案2】:

      感谢@Ehsan Sajjad,工作解决方案是

      var result =
      from record in datatable.AsEnumerable()
      group record by new { 
          Col1 = record.Field<string>("Col1"), 
          Col2 = record.Field<string>("Col2"),
      } into g
      let selectedItem =
      (
          from item in g
          orderby item.Field<string>("Col3") descending
          select item
      ).First()
      select selectedItem;
      

      【讨论】:

        猜你喜欢
        • 2017-02-06
        • 2011-06-28
        • 1970-01-01
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 2013-09-20
        • 1970-01-01
        相关资源
        最近更新 更多