我只是想知道是否有办法用 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/