C# 选择包含特定子元素的对象

C# 选择包含特定子元素的对象,c#,linq,C#,Linq,我有以下课程 public class Bin { public int BinId { get; set; } public IEnumerable<Component> Components { get; set; } } public class Component { public int ComponentId { get; set; } public string ComponentName { get; set; } } 公共类Bi

我有以下课程

public class Bin
{
    public int BinId { get; set; }
    public IEnumerable<Component> Components { get; set; }
}

public class Component 
{
    public int ComponentId { get; set; }
    public string ComponentName { get; set; }
}
公共类Bin
{
public int BinId{get;set;}
公共IEnumerable组件{get;set;}
}
公共类组件
{
公共int组件ID{get;set;}
公共字符串组件名称{get;set;}
}
使用LINQ如何查找包含特定组件集的所有
Bin
对象,例如ID为1、2、3的组件

编辑

只是为了澄清,所有ID必须存在于
Bin
中。我还有一个包含要匹配的ID的集合。

如下所示:

bins.Where(b => b.Components.Any( c => new[]{1,2,3}.Contains(c.ComponentId) )
如果您需要全部:

bins.Where(b => b.Components.All( c => new[]{1,2,3}.Any( i => i == c.ComponentId) ))
或者,如果您需要列表中的某些项目包含以下项目:

bins.Where(b => new[]{1,2,3}.All(i => b.Components.Any(c => i == c.ComponentId) ))
您可以根据需要在子查询中组合所有/任何/包含,如下所示:

bins.Where(b => b.Components.Any( c => new[]{1,2,3}.Contains(c.ComponentId) )
bins.Where(x => x.Components.Any(y  => y.ComponentId ==1 || y.ComponentId == 2 || y.ComponentId == 3))
如果您需要全部:

bins.Where(b => b.Components.All( c => new[]{1,2,3}.Any( i => i == c.ComponentId) ))
或者,如果您需要列表中的某些项目包含以下项目:

bins.Where(b => new[]{1,2,3}.All(i => b.Components.Any(c => i == c.ComponentId) ))
您可以根据需要在子查询中组合所有/任何/包含

bins.Where(x => x.Components.Any(y  => y.ComponentId ==1 || y.ComponentId == 2 || y.ComponentId == 3))
试试这个

如果您有整数列表,则可以修改最后的条件,如下所示

y => list.Any(z => y.ComponentId == z)
或者类似的事情

y => list.Contains(y.ComponentId)
这些条件至少包含一个组件id。如果要包含所有组件id,可以使用
all
方法,而不是
Any

IEnumerable<int> test = ...;
bins.Where(x => !test.Except(x.Components.Select(c => c.ComponentId)).Any());
试试这个

如果您有整数列表,则可以修改最后的条件,如下所示

y => list.Any(z => y.ComponentId == z)
或者类似的事情

y => list.Contains(y.ComponentId)
这些条件至少包含一个组件id。如果要包含所有组件id,可以使用
all
方法,而不是
Any

IEnumerable test=。。。;
IEnumerable<int> test = ...;
bins.Where(x => !test.Except(x.Components.Select(c => c.ComponentId)).Any());
bins.Where(x=>!test.Except(x.Components.Select(c=>c.ComponentId)).Any();
IEnumerable测试=。。。;
bins.Where(x=>!test.Except(x.Components.Select(c=>c.ComponentId)).Any();
var-bins=新列表();
var id=新列表{1,2,3};
//检查每个箱子,确保它有ID中的所有项目
bins.Where(x=>ids.All(id=>x.Components.Select(c=>
c、 包含(id));
var-bins=新列表();
var id=新列表{1,2,3};
//检查每个箱子,确保它有ID中的所有项目
bins.Where(x=>ids.All(id=>x.Components.Select(c=>
c、 包含(id));

这将匹配至少包含一个id为1、2或3的组件的所有箱子谢谢。如何找到包含所有组件的存储箱。我想最后一个就是它。请下次添加更多详细信息。这将匹配所有存储箱,而不是至少包含一个id为1、2或3的组件。谢谢。如何找到包含所有组件的箱子。我想最后一个是它。请下次添加更多详细信息