2014-06-16 37 views
1

我有以下LINQ查詢:過濾器列表匹配所有的IDS

FilteredProducts = AllProducts.Where(p => p.Attributes.Any(a => Filters.Contains(a.ID))); 

FiltersList<int>。以上查詢返回與Filters中的任何屬性ID匹配的任何產品。

如何更改此設置,以便只返回匹配Filters中所有ID的產品(它也可以具有其他屬性,但必須具有在過濾器中具有ID的任何屬性)。

我想過使用相交,而不是任何後來我將不得不使用屬性的列表(我真的不希望這樣做)

+1

您可以反轉邏輯,並在其中使用Filters.All。未經測試,但類似於'FilteredProducts = AllProducts.Where(p => Filters.All(fa => p.Attributes.Any(a => a.ID == fa)));' –

+0

@ Me.Name非常完美,如果你添加這個答案,我會標記它 - 當Janiec提出了一個全部使用的答案但我無法得到內部邏輯正確的時候,我嘗試了將它反轉。 – Pete

+0

啊,很棒,不確定手工語法是否會成立up,但會作爲答案張貼:) –

回答

3

一種可能的解決方案是反向邏輯和測試過濾器。所有產品裏面的條款

AllProducts.Where(p => Filters.All(fa=> p.Attributes.Any(a=> a.ID == fa)));