Q:

Efficient list self compare in LINQ?

This may be very similar to this question but I would like to know the most efficient way in C# and LINQ to compare a list of elements to each other in the same list.
For example, in pseudo code I would like to do this:
foreach(i in list)    
    foreach(j in list.Except(i))    
        Compare(j,i)

I know that Except takes an enumerable instead of single item and may not be the best idea, but it should illustrate my intent.
Any ideas?
Update: 
I guess this question was a bit to vague.  The goal was to iterate over an list twice (using LINQ) while skipping over the pair (i, i); whatever Compare(i,j) actually does is irrelevant to my question.
There's two cases then, one where (i,j) == (j,i) and (i,j) != (j,i).  For the former, George Duckett's skipwhile solution below does the trick, but what about the latter?  This is where my original use of Except came in so that both (i,j) and (j,i) would be evaluated.
So to clarify, is there a better way to skip over an element in a list, other than list.Except(Enumerable.Repeat(i,1))?

A:

This will give you all pairs, assuming the order of pairs doesn't matter (Compare(i, j) == Compare(j, i)):
var test = from i in list
           from j in list.SkipWhile(j => j != i)
           where i != j // Remove the self-comparison if you want to
           select Compare(i, j);

A:

I don't know if you have a requirement for LINQ, but I would most likely write this code this way that way when I review the code 3 weeks from now, at a glance I know what is going on.
for(var i = 0; i < list.Count; ++i)
{
    var item = list[i];
    for(var j = i+1; j < list.Count; ++j)
    {
        Compare(item, list[j]);
    }
}

if you want to still use some LINQ, you could rewrite it this way:
for(var i = 0; i < list.Count; ++i)
{
    var item = list[i];
    foreach(var j in list.Skip(i+1))
    {
        Compare(item, j);
    }
}

