2

我有以下数据结构:列出 myOrders

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

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 的第一个订单,2 个单位 A 的最后 3 行)。

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

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

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

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

4

2 回答 2

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);

或者您可以将数据转换为项目和部件......

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?

于 2013-01-16T19:37:26.730 回答
0

您可以使用 LINQ GroupBy 方法(http://msdn.microsoft.com/ru-ru/library/system.linq.enumerable.groupby.aspx

像这样的东西:

List<Data> data = ...;
var groupedItems = data.GroupBy(d => d.itemName);

对于 WPF,您可以使用分组功能(ItemsControl.GroupStyle 等,例如对于数据网格:http ://wpftutorial.net/DataGrid.html#grouping您可以 google 查找更多教程)

于 2013-01-16T19:30:02.523 回答