我有一个项目集合,这些项目可能有一个或多个属性。
我想使用一个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);
}