Question: I have a single list of objects. These objects have a "match" function that compares a passed object of the same type with themselves and returns true if a condition is met. If this condition is true, I want the objects to be able to manipulate each other. I want to get a collection of all pairs of objects stored in my list where objectA.match(objectB) == true. Or, better yet, execute a method on these pairs such that objectA calls a method with objectB as its parameter if objectA.match(objectB) == true. How would I use LINQ to accomplish this? This sounds like it could be a self-join but I can't quite wrap my head around it.

Answer: 
This will search for all matches in listB for each element in listA, and subsequently execute the method **MethodToManipulate** for each listA element's matches while passing them as parameter.

```
listA.ForEach(a => {
            var matches = listB.Where(b => b.Match(a));
            foreach (var m in matches) a.MethodToManipulate(m); 
            });

```
**UPDATE**

I guess it should look this:

```
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++;
  }
}

```

Should give same results depending on your lists of course. 

```
s.Match()  <= should be your implementation 

```