C# 匹配所有ID的筛选器列表
我有以下linq查询:C# 匹配所有ID的筛选器列表,c#,linq,C#,Linq,我有以下linq查询: FilteredProducts = AllProducts.Where(p => p.Attributes.Any(a => Filters.Contains(a.ID))); 其中过滤器是一个列表。上述查询返回与过滤器中的任何属性ID匹配的任何产品 如何更改此设置,以便只返回与过滤器中的所有id匹配的产品(它也可以具有其他属性,但必须具有过滤器中具有id的任何属性) 我曾考虑使用Intersect而不是Any,但后来我不得不使用属性列表(我真的不想这样做
FilteredProducts = AllProducts.Where(p => p.Attributes.Any(a => Filters.Contains(a.ID)));
其中过滤器
是一个列表
。上述查询返回与过滤器中的任何属性ID匹配的任何产品
如何更改此设置,以便只返回与过滤器中的所有id匹配的产品(它也可以具有其他属性,但必须具有过滤器中具有id的任何属性)
我曾考虑使用Intersect而不是Any,但后来我不得不使用属性列表(我真的不想这样做)一个可能的解决方案是反转逻辑并测试过滤器。所有这些都在products where子句中
AllProducts.Where(p => Filters.All(fa=> p.Attributes.Any(a=> a.ID == fa)));
你可以颠倒逻辑,使用过滤器。所有这些都在where中。未测试,但类似于FilteredProducts=AllProducts.Where(p=>Filters.All(fa=>p.Attributes.Any(a=>a.ID==fa))
@Me.Name太好了,如果你把它作为一个答案添加,我会标记它-当Janice给出一个答案使用all时,我尝试将其反转,但我无法纠正内部逻辑太好了,不确定手动语法是否有效,但会将其作为一个答案发布:)