views:

1509

answers:

3

We have a generic List(Of Product) that must be sorted on two or more properties of the Product class.

The product class has the properties "Popular" numeric (asc), "Clicked" numeric (desc), "Name" string (asc). In order of naming the properties we want the list to sort.

How can it be sort with an lamba statement? If have found to sort the list based on one property.

+2  A: 

I'm sorry but do you know any C#?

products.OrderBy(p => p.Popular).
    ThenByDescending(p => p.Clicked).
    ThenBy(p => p.Name);

Can you get what you need from this?

bruno conde
brilliant! I didn't know about the "ThenBy"
BrokeMyLegBiking
+6  A: 

EDIT Just realized this was a VB question. Here is the VB.Net solution

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

C# version. Try the following

var list = GetSomeList();
var sorted = list.OrderBy(x => x.Popular).ThenBy(x => x.Clicked).ThenBy(x => x.Name);
JaredPar
+1  A: 

To answer your question about a lambda expression, that is too complex to put in a lambda expression, as VB doesn't support multi-line lambda expressions.

For a non-LINQ solution:

You need a named method as a comparer:

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

Usage:

theList.Sort(AddressOf Comparer)
Guffa
Solved a problem I had. Thanks!
John at CashCommons