我们可以使用LINQ在WPF中进行汇总和分组吗?

JSc*_*rtz 2 c# linq wpf

我具有以下数据结构:列出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中的某些东西完成此操作吗?(或您可能建议的其他任何方式-我现在很茫然)。

Amy*_*y B 5

这是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?