gpt4 book ai didi

c# - LINQ 在一条语句中求和嵌套组

转载 作者:太空宇宙 更新时间:2023-11-03 16:40:45 25 4
gpt4 key购买 nike

我正在将一些代码转换为 LINQ,同时探索 LINQ 可以完成到什么程度。

能否将以下代码压缩为单个 LINQ 查询或方法?

Dictionary<string, ItemPack> consolidated = new Dictionary<string, ItemPack>();
foreach (var product in Products)
{
foreach (var smallpack in product.ItemPacks)
{
ItemPack bigpack;
if (consolidated.TryGetValue(smallpack.ItemCode, out bigpack))
{
// the big pack quantity += quantity for making one product * the number of that product
bigpack.Quantity += smallpack.Quantity * product.Quantity;

// References: we make sure that the small pack is using the Item in the big pack.
// otherwise there will be 2 occurance of the same Item
smallpack.Item = bigpack.Item;
}
else
{
bigpack = new ItemPack(smallpack); // Copy constructor
bigpack.Quantity = smallpack.Quantity * product.Quantity;
consolidated.Add(smallpack.ItemCode, bigpack);
}
}
}
return consolidated;

在英语中,每件产品都由几件不同数量的元素组成。这些元素按元素代码分组,并打包成小包。这些小包装作为一个单元产品一起运输。有许多不同的产品。单个项目可以用于不同的产品。

我现在有一份产品 list 以及每件产品所需的装运数量。我想要一个 LINQ 语句来合并项目及其数量的平面列表。

我已经走到这一步了,但它看起来不起作用:

var packsQuery = from product in Products
from smallpack in product.ItemPacks
select new {Item = smallpack.Item, Quantity = smallpack.Quantity * product.Quantity};

foreach (var pack in packsQuery)
{
consolidated.Add(pack.Item.ItemCode, new ItemPack(pack.Item, pack.Quantity));
}

如果我先分组,那么我就不能选择项目的数量。如果我先选择,那么我会失去分组。鸡和蛋的故事?

编辑:有用的注释:smallpack 是 ItemPack 类型,看起来像这样

public class ItemPack
{
Item { get; } // The item in this pack, which *must* be a shared reference across all objects that uses this Item. So that change in Item properties are updated everywhere it is used. e.g. Price.
ItemCode { get; } // The item code
Quantity { get; } // The number of such Item in this pack.
}

最佳答案

    var query = (from product in Products
from smallPack in product.ItemPacks
select new
{
ItemCode = smallPack.ItemCode,
Item = smallPack.Item,
Quantity = smallPack.Quantity * product.Quantity,
})
.GroupBy(p => p.ItemCode)
.Select(p => new
{
ItemCode = p.Key,
Item = p.FirstOrDefault(),
Quantity = p.Sum(x=>x.Quantity)
})
.ToDictionary(p=>p.ItemCode);

关于c# - LINQ 在一条语句中求和嵌套组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7642694/

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