C#のLinqのOrderBy関数は、配列を並び替えた結果を返す関数です。
var arrange = people.OrderBy(p => p.No);
といったようにソートするキーを渡すのが主だった使い方です。
しかし、OrderBy関数にはIComparerを実装したクラスを渡すことができます。
クラスであるため、やや複雑なソートが行う際に使うことができます。
しかし、このOrderBy、MSDNを見ても使い方がパッと見ではわかりづらいです。
以下のように呼び出します。
var arrange = people.OrderBy(p => p, comparer);
Let's code
using System; using System.Collections.Generic; using System.Linq; public class Program { public static void Main() { var people = new Person[] { new Person { No = 2 , Name = "Yamada"}, new Person { No = 2 , Name = "Suzuki"}, new Person { No = 1 , Name = "Tanaka"}, }; var comparer = new CustomComparer(); var arrange = people.OrderBy(p => p, comparer); foreach(var person in arrange) { Console.WriteLine(person.No + " " + person.Name); } } public class Person { public int No {get; set;} public string Name { get; set;} } public class CustomComparer : IComparer<Person> { public int Compare(Person x, Person y) { if (x.No != y.No) { return x.No.CompareTo(y.No); } return x.Name.CompareTo(y.Name); } } }