gpt4 book ai didi

c# - 用 Linq 合并 List

转载 作者:行者123 更新时间:2023-11-30 14:25:55 25 4
gpt4 key购买 nike

我只是想知道是否有办法用 linq 合并订单对象列表?我的场景如下,我为了这个问题的目的而浓缩了。

public class Order
{
public string Guid { get; set; }
public string Parent { get; set; }
public string ProductID { get; set; }
public string Description { get; set; }
public double Quantity { get; set; }
public double Total { get; set; }
}

这将成为基于上述内容的列表,如下所示:

GUID       PARENT       ID         Desc          Qty           Total
====================================================================
aaa 120 Burger 1 2.50
bbb aaa 121 + Bacon 1 0.50
ccc 123 Fries 1 1.50
ddd 120 Burger 1 2.50
eee ddd 124 + Cheese 1 0.30
fff 123 Fries 1 1.50

在这个例子中我想做的是以下面的结尾

GUID       PARENT       ID         Desc          Qty           Total
====================================================================
aaa 120 Burger 1 2.50
bbb aaa 121 + Bacon 1 0.50
ccc 123 Fries 2 3.00
ddd 120 Burger 1 2.50
eee ddd 124 + Cheese 1 0.30

如果该项目有子产品,我不会尝试合并,并且基本上总计为其他所有项目的总数和数量。

我现在的想法是创建一个单独的列表,仅包含没有子项的产品,然后与有子项的产品进行精心合并。

我可以这样做,但我想知道是否有更简洁的方法,任何输入都将不胜感激

最佳答案

这应该使子订单分开,并仅合并独立订单:

var orders = originalOrders.GroupBy(_ => _.parent ? _.parent : _.guid);
var consolidated = orders
.Where(grp => grp.Count() == 1) // only orders with no children
.SelectMany(grp => grp)
.GroupBy(_ => _.ID)
.Select(grp => grp.Aggregate((a,b) => new order
{
guid = a.guid,
parent = a.parent,
ProductID = a.ProductID,
Description = a.Description,
Quantity = a.Quantity + b.Quantity,
Total = a.Total + b.Total
}
));

var allOrders = orders
.Where(grp => grp.Count() > 1)
.SelectMany(grp => grp)
.Concat(consolidated);

关于c# - 用 Linq 合并 List<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36893945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com