LiNQ 中的 C# 数据表重复

C# Datatable Duplicate in LiNQ

我有一个包含 4 列的数据表:

Parent ID    ID    Qty    Qty Type
A            A12   5      xxx
B            A32   10     xxx
A            A12   4      xxx
A            B23   3      yyy

最终结果应该是:

Parent ID    ID    Qty    Qty Type
A            A12   9      xxx
B            A32   10     xxx
A            B23   3      yyy

所以基本上逻辑应该是它会删除任何一组相同的 {Parent ID AND ID} 并向其中添加 Qty。在我们的示例中,第一个和第三个元素是相同的父 ID 和相同的 ID,因此我们删除第三个元素并将 Qty 添加到第一个元素(我们还必须检查 QTY Type 是否相同,如果不相同,我们必须删除一个错误)。

注意第 1 和第 4 没有被添加 - 因为他们的父 ID 可能相同但他们的父 ID + ID 不相同因此我们不添加。

有没有办法在 Linq 中做到这一点?不完全但主要是这样吗?

还没有测试过,但看看这是否有效...

void Main()
{
    var lst = dt.Rows.OfType<DataRow>()
                .GroupBy (r => r["Parent ID"].ToString() + "|" + r["ID"].ToString())
                .Select (g => Record.GenerateRecord(g))
                .ToList();

}


public class Record
{
    public string ParentId { get; set; }
    public string Id { get; set; }
    public int Qty { get; set; }
    public string QtyType { get; set; }

    public static Record GenerateRecord(IGrouping<string, DataRow> grp)
    {
        var splt=grp.Key.Split('|'); 
        var rec= new Record{Parent=splt[0], Id=splt[1], QtyType=grp.First()["Qty Type"].ToString()};
        if (grp.Count()==1)
            rec.Qty = int.Parse(grp.First()["Qty"].ToString());
        else
            rec.Qty = grp.Sum (g => int.Parse(g["Qty"].ToString()));
        return rec;
    }
}