我有以下课程。
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; }
}
使用LINQ如何找到包含特定组件集的所有Bin
个对象,比如ID为1,2,3的组件?
修改
只是为了澄清所有ID必须出现在Bin
中。我还有一个包含要匹配的ID的集合。
答案 0 :(得分:1)
像这样:
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) ))
您可以根据需要组合子查询中的所有/任何/包含
答案 1 :(得分:1)
IEnumerable<int> test = ...;
bins.Where(x => !test.Except(x.Components.Select(c => c.ComponentId)).Any());
答案 2 :(得分:1)
var bins = new List<Bin>();
var ids = new List<int> { 1, 2, 3 };
// go through each bin and make sure it has all the items in ids
bins.Where(x => ids.All(id => x.Components.Select(c =>
c.ComponentId).Contains(id)));
答案 3 :(得分:0)
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