将foreach转换为单通道Linq Group By



我有一个项目集合,这些项目可能有一个或多个属性。

我想使用一个Linq语句(查询语法)来过滤和分组该列表,以便它首先检查一个强制性的属性,然后寻找一个可选的属性。

如果不先过滤列表,然后再遍历列表寻找可选属性,我不知道如何做到这一点。

下面是我如何在foreach语句中做到这一点。(没有效率,只是说明我需要什么。)
var usefulBoxes = new Dictionary<Box, int>;
foreach (box in cart)
{
  bool boxNeeded = false;
  int someCounter = 0;
  foreach (prop in box.Properties)
  {
    if (prop == neededProp)
      boxNeeded = true;
    else if (boxNeeded && prop == optionalProp)
      someCounter += 1;
  }
  if (boxNeeded)
    usefulBoxes.Add(box, someCounter)
}
  var usefulBoxes= box.where(b=>b.boxProperties.prop==neededProp).ToList();

这是你的演示linq:

var usefulBoxes = new Dictionary<List<int>, int>();
        foreach (var boxNeeded in from box in cart let boxNeeded = false let someCounter = 0 from prop in box.Properties.Where(prop => prop == neededProp) select boxNeeded)
        {
            if (prop == neededProp)
                boxNeeded = true;
            else if (boxNeeded && prop == optionalProp)
                someCounter += 1;
            if (boxNeeded)
                usefulBoxes.Add(box, someCounter);
        }

相关内容

  • 没有找到相关文章

最新更新