.NET 4を使用している場合(そしてあなたがそうであるようには聞こえない場合)、Enumerable.Zipを使用して何か賢いことができるかもしれないと思います。何かのようなもの:
var r = x.Zip(y, comparer.Compare).FirstOrDefault(c => c != 0);
短い方が長い方と同じ場合にどう対処したらいいのか、今のところわかりませんが。
編集:配列を比較しているだけの場合(またはコレクションを2回測定する必要がない場合)、単純に次のように追加できると思います。
if (r == 0) {
r = int.Compare(x.Count(), y.Count());
}
これらを次のように組み合わせることもできます。
var r = x.Zip(y, comparer.Compare)
.Concat(new [] { int.Compare(x.Count(), y.Count()) })
.FirstOrDefault(c => c != 0)
(.NET 3.5を使用している場合は、Zip拡張メソッドを追加します。これは、記述が簡単で、あらゆる場所で非常に役立つためです。最初のLinqリリースに含まれていなかった理由はわかりません。)