假设我的对象处于完美工作状态(即TDD让我认为它们工作正常)。以编程方式构建LINQ查询,而无需本地变量欺骗我
我有这样创建(除缩进正确)的列表:
var result = from v in vendors
from p in v.Products
orderby p.Name
select p;
这工作 - 我得到的所有产品全部供应商。
现在我有一个条件列表,由用户在运行时建立。让我们来运用它们:
foreach (Attribute a in requiredAttributes)
{
result = result.Where(p => p.Attributes.Contains(a));
}
这可能是原始的,但我认为它会起作用。但是,在这个foreach循环完成后,当枚举“result”时,它将包含所有在其Attributes属性(也是集合)中具有requiredAttributes集合的LAST属性的产品。
对我来说,这个味道像“a”被每个行程通过循环覆盖,只有最后一个适用。
不知何故向IEnumerable写了一个名为ContainsAll(IEnumerable)的扩展方法,或者是那种效果,我该如何实现我想要的,这基本上是一个逻辑AND,只给出那些具有所有必需属性的产品?
感谢家伙 - 我给予Jon的“接受答案”,因为它似乎可能更适合“一般”情况。但我肯定会检查出奥默的建议,不知道你能做到这一点。投票给所有人。 :) – 2008-10-10 06:30:56
解决此问题的新方法是仅使用C#5。另见[在foreach中使用变量在C#5中进行了更改?](http://stackoverflow.com/a/12112959/18192) – Brian 2016-01-15 14:38:38