【问题标题】:How to remove items with count == 3 using LINQ如何使用 LINQ 删除 count == 3 的项目
【发布时间】:2020-08-09 23:44:08
【问题描述】:

我有以下

var itemRowsAvailableToMoveToBrokenBundle = customerBasket.ItemsInBasket.Where(s => !string.IsNullOrEmpty(s.BundleId)
                                                                                     && s.Item.Department == removedIem.Item.Department);

现在我正在尝试从 itemRowsAvailableToMoveToBrokenBundle 中删除 bundleId 中的所有项目,以便它们的计数 == 3,例如,如果三个 ItemInBasket 具有 bundleId == "1",那么我想删除它们。

我尝试使用 .count() 但我不知道如何跨多个捆绑包执行此操作,因为如果我指定一个 bundleId 和 count() 它只会给我那个特定的捆绑包,我想删除所有带有 count = 的捆绑包= 3

【问题讨论】:

  • 正好 3 或 >= 3?
  • @Steve Exactly 3,当一个包恰好有 3 个具有相同 bundleId 的项目时,它被定义为“完整”,如果第四个项目被添加到购物篮中,它会得到一个新的 bundleId,所以我正在尝试删除所有“完整”捆绑包,以便我可以找到可以插入新项目的捆绑包(如果有的话)
  • 这只是对我向您展示的查询 before 的一个小修改。

标签: c# linq


【解决方案1】:

您可以在BundleId 上应用groupBy 以查看计数并相应地应用条件。

itemRowsAvailableToMoveToBrokenBundle  = itemRowsAvailableToMoveToBrokenBundle 
                                           .GroupBy(i => i.BundleId)
                                           .Where(i => i.Count() != 3)
                                           .SelectMany(i => i);

以上代码将删除所有计数等于 3 的 budndleId。

【讨论】:

  • @mjwills - 因此不需要。我已经更新了我的答案。感谢您指出。
猜你喜欢
  • 2019-02-05
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
  • 2014-01-30
  • 2019-05-03
相关资源
最近更新 更多