使用LINQ返回满足条件的对象对的集合

时间:2016-12-16 07:42:54

标签: c# linq collections

我有一个对象列表。这些对象有一个"匹配"将相同类型的传递对象与自身进行比较的函数,如果满足条件则返回true。如果这个条件成立,我希望对象能够相互操作。我想获得存储在我的列表中的所有对象对的集合,其中objectA.match(objectB)== true。或者,更好的是,在这些对上执行一个方法,以便objectA调用一个方法,如果objectA.match(objectB)== true,则将objectB作为其参数。我如何使用LINQ来实现这一目标?这听起来像是一个自我加入,但我不能完全围绕它。

2 个答案:

答案 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