【问题标题】:LINQ count field of selected objects选定对象的 LINQ 计数字段
【发布时间】:2020-10-02 02:09:13
【问题描述】:

我有一个 PurchaseOrderOrderItem 类。在 PurchaseOrder 内部,我有一个 OrderItem 数组。

OrderItem 具有 ItemNameQuantity

现在我想获取具有给定 ItemName 的所有 PurchaseOrders 中所有 OrderedItemsQuantity 计数。

var query = PurchaseOrders.Select(order => from item in order.OrderedItems where itemName == item.ItemName)

这是我走了多远,但这只会返回订单中确实有 itemName 的订单,这与我的目标相去甚远。

我如何在 LINQ 中实现这一点?

【问题讨论】:

  • .Count()可以帮你
  • 你试过var query = PurchaseOrders.Select(order => from item in order.OrderedItems where itemName == item.ItemName).Count();
  • 抱歉,我的问题有误。我想计算所有购买订单中具有给定名称的所有项目的字段数量。

标签: c# .net linq asp.net-core


【解决方案1】:

要仅获取一个名称的总数量,请使用SelectMany 从订单集合中获取所有项目的集合。

var count = PurchaseOrders
    .SelectMany(order => order.OrderedItems)
    .Where(item => item.ItemName == "name")
    .Sum(item => item.Quantity);

通过SelectManyGroupBy 的组合,您可以构建一个字典,其中 Key 是项目的名称,Value 是具有相应名称的项目的总数。

var quantities = PurchaseOrders
    .SelectMany(order => order.OrderedItems)
    .GroupBy(item => item.ItemName)
    .ToDictionary(group => group.Key, group => group.Sum(item => item.Quantity));

// Then you can get total quantity for any name
var quantity = quantities.GetValueOrDefault("firstItem");

【讨论】:

  • 抱歉,我的问题有误。我想计算所有购买订单中具有给定名称的所有项目的字段数量。
  • @Bioaim,使用Sum计算总量
猜你喜欢
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多