Linq查询集合属性并匹配所有子级

Linq查询集合属性并匹配所有子级,linq,entity-framework,collections,children,Linq,Entity Framework,Collections,Children,我正在处理这个查询,这需要一段时间,因为我对Linq还很陌生 我有两个系列c.l.ChoreTIs和c.r.ChoreTIs 我想在c.l.Chore.TIs.Name==c.r.ChoreTIs.Name的位置获取所有参数,但并非所有参数(子项)都与parameterValue匹配 我很接近,但仍然有一些问题 Dim Query = From l In c.l.ChoreTIs _ Join r In c.r.ChoreTIs On l.

我正在处理这个查询,这需要一段时间,因为我对Linq还很陌生

我有两个系列
c.l.ChoreTIs
c.r.ChoreTIs

我想在
c.l.Chore.TIs.Name==c.r.ChoreTIs.Name
的位置获取所有参数,但并非所有参数(子项)都与
parameterValue
匹配

我很接近,但仍然有一些问题

Dim Query = From l In c.l.ChoreTIs _
                            Join r In c.r.ChoreTIs On l.Name Equals r.Name _
                            Where (l.Parameters.All(Function(lp) r.Parameters.Any(Function(rp) lp.parameterValue = rp.parameterValue)))
                            Select New With {.lChore = l, .rChore = r}
查询工作正常,但我得到了所有匹配名称的
ChoreTIs
,即使不是所有
参数都匹配。我需要返回所有不完全匹配的地方

我只想要与名称匹配的参数,但它们的子项(参数)数量不完全相同,或者一个参数的
参数值不同

有更好的方法吗?或者我怎样才能修复它

干杯

更新:

Dim Query = From l In c.l.ChoreTIs _
                            Join r In c.r.ChoreTIs On l.Name Equals r.Name _
                            Where (l.Parameters.Count <> r.Parameters.Count) Or _
                                  ((l.Parameters.Count = r.Parameters.Count) And
                                  (l.Parameters.Select(Function(lp) lp.parameterValue).Except(r.Parameters.Select(Function(rp) rp.parameterValue)).Any()))
                            Select New With {.lChore = l, .rChore = r}
Dim Query=从c.l.ChoreTIs中的l开始_
在l上的c.r.ChoreTIs中加入r。名称等于r.名称_
其中(l.Parameters.Count r.Parameters.Count)或_
((l.Parameters.Count=r.Parameters.Count)和
(l.Parameters.Select(函数(lp)lp.parameterValue)。除了(r.Parameters.Select(函数(rp)rp.parameterValue)).Any())
用{.lChore=l、.rChore=r}选择新建

我已经让它工作了,但如果有人有更好的方法,我还是会很乐意的。

我想你可以尝试使用intersect:

var newData = c.l.ChoreTIs.Select(a => a.Name).Intersect(c.r.ChoreTIs.Select(s => s.Name));

我的VB语法可能不是100%正确,但这是否更接近您想要的:

    Dim query = _
        From l In c.l.ChoreTIs _
        Join r In c.r.ChoreTIs On l.Name = r.Name _
        Where (l.Parameters.All(Function(lp) r.Parameters.Any(Function(rp) lp = rp)))
        New From _
        { _
            l, _
            r _
        }

你想要所有的
ChoreTIs
都来自
c.l.*
&
c.r.*
,还是仅仅来自一个或另一个?我想要它们中的两个,就像在两个对象中左和右选择l,c那样我就可以操纵它们两个。谢谢非常感谢,但是我需要找到那些c.l和c.r ChoreTis,它们匹配名称,也匹配它们在parameterValue中的所有子对象,并返回这两个对象。l和r。谢谢,伙计,非常接近。我一直在测试,但还没有开始工作。我使用了你的查询,但它没有返回任何结果,根据我的测试,我应该得到1个琐事。如果我把行“lp=rp”改为lp.Equals(rp),我就得不到任何回报。如果我把它改为lp.parameterValue=rp.parameterValue,我会得到两个,而我应该只得到一个。正在寻找解决方案。非常感谢您的帮助当r中的所有子级(参数)在count和parameterValue中匹配l时,wheare子句基本上应该返回false。我认为我的VB语法有点不可靠。我希望它能帮上忙。它确实帮了忙,但仍然没有达到我预期的效果。我得到的是“ChoreTIs”,但不仅仅是参数count(Children)和parameterValue不完全匹配的那些。似乎无法找到一种方法来获取所有没有完全相同的参数集合(子项)的ChoreTIs。