2

属性 att1 と att2 を持つエンティティがあるとします。ここで、att1 は値 a、b、c を持つことができ、att2 は値 1、2、3 を持つことができます。IComparable を実装せずに、任意の並べ替えルールを適用してコレクション内の項目を並べ替えることができるように、LINQ を使用することは可能ですか。コレクション内の一部の画面ではアイテムを 1 つの方法で並べ替え、別の画面では別の方法で並べ替える必要があるという問題に直面しています。たとえば、「b」が最初にリストされ、次に「a」、次に「c」がリストされ、各グループ内で「3」が最初に、次に「1」、「2」がリストされるように項目をソートする必要があることをルールで示すことができます。

4

1 に答える 1

7

もちろん。OrderBy多かれ少なかれ任意の「ソート順」を返す述語で使用できます。例えば:

objectsWithAttributes.OrderBy(x =>
{
    // implement your "rules" here -- anything goes as long as you return
    // something that implements IComparable in the end.  this code will sort
    // the enumerable in the order 'a', 'c', 'b'

    if (x.Attribute== 'a')
        return 0;
    else if (x.Attribute== 'c')
        return 1;
    else if (x.Attribute== 'b')
        return 2;
}).ThenBy(x =>
{
    // implement another rule here?
});
于 2009-05-28T14:27:12.423 に答える