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

  • 本文关键字:其他 WPF LINQ 我们 c# wpf linq
  • 更新时间 :
  • 英文 :


我有以下数据结构:列表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,后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 ?

您可以使用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等,例如datagrid: http://wpftutorial.net/DataGrid.html#grouping(你可以谷歌找到更多的教程)

相关内容

  • 没有找到相关文章

最新更新