将foreach转换为单通道Linq Group By

时间:2014-03-25 04:50:10

标签: c# linq

我有一组可能包含一个或多个属性的项目。

我想使用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)
}

2 个答案:

答案 0 :(得分:0)

  var usefulBoxes= box.where(b=>b.boxProperties.prop==neededProp).ToList();

答案 1 :(得分:0)

这是你的演示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);
        }