2009-05-15 8 views
14

Productクラスの2つ以上のプロパティでソートする必要がある汎用List(Of Product)があります。2つ以上の値の汎用リストをソート

プロダクトクラスには、「人気のある」数字(昇順)、「クリック」の数字(desc)、「名前」の文字列(asc)があります。プロパティに名前を付ける順番で、リストをソートする必要があります。

lambaステートメントでどのようにソートできますか? 1つのプロパティに基づいてリストをソートすることが判明した場合。

答えて

3

申し訳ありませんが、C#を知っていますか?

これで必要なものを手に入れることはできますか?

+0

華麗!私は "ThenBy"について知らなかった – BrokeMyLegBiking

30

EDITこれはVBの質問でした。ここVB.Netソリューションです。

Dim list = GetSomeList() 
Dim sorted = list. _ 
    OrderBy(Function(x) x.Popular). _ 
    ThenBy(Function(x) x.Clicked). _ 
    ThenBy(Function(x) x.Name) 

C#バージョンです。 VBは、複数行のラムダ式をサポートしていないとして、ラムダ式に入れるにはあまりにも複雑であるラムダ式、についてのご質問に答えるために、次の

var list = GetSomeList(); 
var sorted = list.OrderBy(x => x.Popular).ThenBy(x => x.Clicked).ThenBy(x => x.Name); 
5

を試してみてください。非LINQのソリューションについては

あなたは比較子として指定されたメソッドが必要になります。

Private Function Comparer(ByVal x As Product, ByVal y As Product) As Integer 
    Dim result As Integer = x.Popular.CompareTo(y.Popular) 
    If result = 0 Then 
     result = x.Clicked.CompareTo(y.Clicked) 
     If result = 0 Then 
      result = x.Name.CompareTo(y.Name) 
     End If 
    End If 
    Return result 
End Function 

使用法:

theList.Sort(AddressOf Comparer) 
+0

私が持っていた問題を解決しました。ありがとう! – John

+0

@Guffa - VBは複数のラムダ式をサポートしています。 –

+0

@roryap:そうです。答えが書かれた時ではない。 – Guffa

2
List<Product> sortedProducts = null; 
sortedProducts = products.OrderBy(p => p.Popular) 
         .ThenByDescending(p => p.Clicked) 
         .ThenBy(p => p.Name) 
         .ToList(); 
関連する問題