我有一个对象列表。这些对象有一个"匹配"将相同类型的传递对象与自身进行比较的函数,如果满足条件则返回true。如果这个条件成立,我希望对象能够相互操作。我想获得存储在我的列表中的所有对象对的集合,其中objectA.match(objectB)== true。或者,更好的是,在这些对上执行一个方法,以便objectA调用一个方法,如果objectA.match(objectB)== true,则将objectB作为其参数。我如何使用LINQ来实现这一目标?这听起来像是一个自我加入,但我不能完全围绕它。
答案 0 :(得分:1)
这将在listB中搜索listA中每个元素的所有匹配项,然后为每个listA元素的匹配项执行方法 MethodToManipulate ,同时将它们作为参数传递。
listA.ForEach(a => {
var matches = listB.Where(b => b.Match(a));
foreach (var m in matches) a.MethodToManipulate(m);
});
答案 1 :(得分:0)
<强>更新强>
我想它应该看起来:
var listA = GetListA();
var listB = GetListB();
var max = listA.Where(x=>listB.Any(s=>s.Match(x)).ToList().Count();
//mathPairList is 2 dimensions Array which holds [listAitem, listBitem]
Object[,] matchPairList= new Object[max, 2];
int row = 0;
foreach(var listAitem in listA)
{
var listBitem= listB.Where(s=>s.Match(listAitem)).FirstOrDefault().;
if (match != null)
{
matchPairList[row,0] = listAitem;
matchPairList[row,1] = listBitem;
row++;
}
}
根据您的课程列表,应该给出相同的结果。
s.Match() <= should be your implementation