使用 LINQ,如何找到一个项目列表,其中的组件列表包含另一个组件列表中的组件?
结构:
class Item
{
public List<Component> Components {get;set;}
}
class Component
{
public string Name {get;set;}
}
Example:
var components = new List<string> { "C1", "C2" , "C3" }
var items = new List<Item>
{
new Item("IT1")
{
Components = new List<Component> { "C1", "C4","C5" }
},
new Item("IT2")
{
Components = new List<Component> { "C6", "C7","C8" }
},
new Item("IT3")
{
Components = new List<Component> { "C2", "C0","C9" }
}
}
输出将返回项目 IT1 和 IT3。
我尝试了以下方法:
items
.Select(i => i.Components)
.Where(c => components.Contains(c.Any(x => x.Name.ToString()));
我收到以下错误:
无法将 lambda 表达式转换为预期的委托类型,因为
块中的某些返回类型不可隐式转换
到委托返回类型
应该是相反的:首先Any
然后是Contains
。您想要获得所有具有以下特征的物品:any那里的组件包含 in the components
list.
也不要使用Select
如果您想获得以下列表Item
back:
var result = items.Where(i => i.Components.Any(c => components.Contains(c.Name)));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)