我具有以下数据结构:列出myOrders
因此,这是基于今天收到的订单的数据列表(如下所示)(因此,如果不同的人多次购买相同的商品,则可以重复)。
Data
{
string itemName
double itemQuantiy
string partName
double partQuantity
}
Run Code Online (Sandbox Code Playgroud)
例如,填充后的列表如下所示:
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
Run Code Online (Sandbox Code Playgroud)
从上表中可以看到,项目A有3个部分(alpha,beta,delta),项目B有两个部分(alpha,gamma),它们各自具有各自的数量,在此示例中,项目A被定购了两次(前3行)是A的1个单位的第一个顺序,A的2个单位的后3行)。
我需要向用户展示此内容,但应按项目分组并且应汇总数量。
最终结果(在屏幕上显示给用户)应如下所示:
itemName itemQuantity partName partQuantity
A 3 alpha 15
beta 6
delta 300
B 1 alpha 17
gamma 2000
Run Code Online (Sandbox Code Playgroud)
可以使用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);
Run Code Online (Sandbox Code Playgroud)
或者,您也可以将数据变成项目和零件...
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();
Run Code Online (Sandbox Code Playgroud)
这里有一些可能不一致的数据,使这种分组更加困难。
itemName itemQuantity partName partQuantity
A 1 alpha 5
A 2 beta 2
A 1 delta 100
Run Code Online (Sandbox Code Playgroud)
我有1 A还是2 A?
| 归档时间: |
|
| 查看次数: |
2227 次 |
| 最近记录: |