gpt4 book ai didi

c# - 我们可以在 WPF 中使用 LINQ 或其他东西进行聚合和分组吗?

转载 作者:行者123 更新时间:2023-12-02 05:17:45 24 4
gpt4 key购买 nike

我有以下数据结构: 列出我的订单

所以它是一个基于今天收到的订单的数据列表(如下所示)(如果不同的人多次购买相同的商品,您可以复制)。

Data
{
string itemName
double itemQuantiy
string partName
double partQuantity
}

例如,填充后列表如下所示:

  itemName   itemQuantity   partName   partQuantity
A 1 alpha 5
A 1 beta 2
A 1 delta 100
B 1 alpha 17
B 1 gamma 2000
A 2 alpha 10
A 2 beta 4
A 2 delta 200

从上表中可以看出,商品 A 有 3 个部分(alpha、beta、delta),商品 B 有两个部分(alpha、gamma),每个部分都有各自的数量,在此示例中,商品 A 被订购了两次(前 3 行是 1 单位 A 的第一个订单,最后 3 行是 2 单位 A 的订单)。

我需要将其呈现给用户,但它应该按项目分组并且数量应该聚合。

最终结果(在屏幕上显示给用户)应如下所示:

  itemName   itemQuantity   partName   partQuantity
A 3 alpha 15
beta 6
delta 300
B 1 alpha 17
gamma 2000

这可以使用 LINQ 或 WPF 中的东西来完成吗?(或您可能建议的任何其他方式 - 我现在不知所措)。

最佳答案

这是 Linq 方式。

List<Data> myOrders = GetList();

IEnumerable<Data> groupingQuery = myOrders
.GroupBy(data => new { data.itemName, data.partName } )
.Select(g => new Data()
{
itemName = g.Key.itemName,
partName = g.Key.partName,
itemQuantity = g.Sum(x => x.itemQuantity),
partQuantity = g.Sum(x => x.partQuantity)
})
.OrderBy(data => data.itemName)
.ThenBy(data => data.partName);

或者您可以将数据转化为项目和部分...

List<Item> items = (
from data in myOrders
group data by data.itemName into itemGroup
let partGroups = itemGroup.GroupBy(x => x.partName)
select new Item()
{
itemName = itemGroup.Key,
itemQuantity = partGroups.Min(partGroup => partGroup.Sum(x => x.itemQuantity)),
Parts = (
from partGroup in partgroups
select new Part() { partName = partGroup.Key, partQuantity = partGroup.Sum(x => x.partQuantity) }
).ToList();
}).ToList();

这里有一些可能不一致的数据,这使得分组更加困难。

itemName   itemQuantity   partName   partQuantity
A 1 alpha 5
A 2 beta 2
A 1 delta 100

我有 1 个 A 还是 2 个 A?

关于c# - 我们可以在 WPF 中使用 LINQ 或其他东西进行聚合和分组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14366170/

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