我正在研究这个查询,因为我对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
都匹配,我也会获得与名称匹配的所有Parameters.parameterValue
。我需要返回所有不完全匹配的地方。
我只想要与名称相匹配的ChoreTIs,但它们没有完全相同数量的子项(参数)或一个参数具有不同的parameterValue
。
有更好的方法吗?或者我该如何解决?
干杯
更新:
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}
我得到了它的工作,但如果有人有更好的方法,我仍然会很热衷。
答案 0 :(得分:0)
我认为你可以尝试使用intersect:
var newData = c.l.ChoreTIs.Select(a => a.Name).Intersect(c.r.ChoreTIs.Select(s => s.Name));
答案 1 :(得分:0)
我的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 _
}