Linq查询集合属性并匹配所有子级
我正在处理这个查询,这需要一段时间,因为我对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.
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。