假設我的對象處於完美工作狀態(即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