我有两个不同类型的自定义对象列表,我正在尝试执行内部联接,其中联接条件包含在对象的子级列表中。
这是我的对象的一个示例:
public class Container
{
public List<Reference> Refs;
public Container(List<Reference> refs )
{
Refs = refs;
}
}
public class Reference
{
public int Id;
public Reference(int id )
{
Id = id;
}
}
这是我正在处理的数据的示例:
List<Container> containers = new List<Container>()
{
new Container(new List<Reference>()
{
new Reference(1),
new Reference(2),
new Reference(3)
}),
new Container(new List<Reference>()
{
new Reference(4),
new Reference(5),
new Reference(6)
})
};
List<Reference> references = new List<Reference>()
{
new Reference(4),
new Reference(5),
new Reference(6)
};
我试图基于Container
选择List<Container>
中Reference
中具有匹配List<Reference>
的所有Reference.Id
。有了这些数据,我希望仅选择List<Container>
中的第二项。
如果这是有效的语法,那么我将按照以下方式进行操作:
var query = from c in containers
join r in references on c.Refs.Contains( r.Id )
select c;
这怎么办?谢谢
对不起,标题不好。我正在努力将这种情况用简短的文字表述-如果您认为更合适的内容,请提出建议。谢谢
答案 0 :(得分:1)
error[E0499]: cannot borrow `store` as mutable more than once at a time
答案 1 :(得分:1)
这里不需要内部联接,最好没有它:
containers.Where(c => c.Refs.Any(x => references.Any(e => x.Id == e.Id)));
或者如果您希望整个ID相等,则使用SequenceEqual
:
var sequence = references.Select(e => e.Id);
var result = containers.Where(c => c.Refs.Select(s => s.Id).SequenceEqual(sequence));
答案 2 :(得分:0)
我会使用:
var query = from c in containers where c.Refs.SequenceEqual(references)
select c;
不需要加入。