首页 > 解决方案 > 使用 VB.Net 根据数据表中的行项删除重复行的最佳方法是什么?

问题描述

在阅读了互联网上的多个帖子后,我无法弄清楚如何做到这一点,我只想在下面就这个问题发表一个非常清楚的帖子。

如果我指向一篇有相同问题的文章对我有帮助,我将删除该帖子。

我在下面有一个示例数据表。我想删除重复的行,但仅在“请求类型”为“取消订单”且“订单号”相同的情况下。

Report Date Time, Order Number, Request Type, Old Value, New Value
12/5/2019 12:00 , TM123456-01 , Cancel Order, 470000000, 5700000000
12/5/2019 12:00 , TM123456-01 , Cancel Order , 123000000, 4560000000
12/5/2019 12:00 , MT123456-02 , Add Order    , 470000000, 5700000000
12/5/2019 12:00 , AP123456-02 , Add Order    , 470000000, 5700000000
12/5/2019 12:00 , ST123456-02 , Remove Order , 470000000, 5700000000

因此,应该从上述数据表中删除的行应该是第 2 行,因为它与第 1 行具有相同的“订单号”,即“TM123456-01”,并且它的请求类型是“取消订单”。

我想留下的结果将是下面的数据表。

Report Date Time, Order Number, Request Type, Old Value, New Value
12/5/2019 12:00 , TM123456-01 , Cancel Order, 470000000, 5700000000
12/5/2019 12:00 , MT123456-02 , Add Order    , 470000000, 5700000000
12/5/2019 12:00 , AP123456-02 , Add Order    , 470000000, 5700000000
12/5/2019 12:00 , ST123456-02 , Remove Order , 470000000, 5700000000

我知道我可能可以使用嵌套的 For Each 循环来执行此操作,但我想了解如何使用 Microsoft LINQ 或其他方法以更优雅的方式执行此操作。

标签: vb.netlinqfilterdatatableunique-values

解决方案


C#版本:

var result = orders.GroupBy(x => new { x.OrderNumber, x.RequestType})
            .SelectMany(x => x.Key.RequestType=="Cancel Order" ? x.Take(1) : x.ToList());

推荐阅读