If I was to have a list of objects with the following properties:
SomeClass.ID
SomeClass.Name
The .ID
can be an integer while .Name
can be a string, is there a way to sort the objects so that any 0
.ID
is sorted and placed AFTER the non-zero ID numbers?
CodePudding user response:
Yes, you can use System.Linq
:
Dim sorted = From o In yourObjectList
Order By o.Id = 0, o.Id
yourObjectList = sorted.ToList()
That's a conditional order, because o.Id = 0
will evaluate to either True
or False
. You want the non-zero first, so order Ascending
(default) since True
is "greater than" False
.
This is the same in the (in VB.NET ugly) method syntax:
yourObjectList = yourObjectList.
OrderBy(Function(o) o.Id = 0).
ThenBy(Function(o) o.Id).
ToList()
You can also rewrite it to use the conditional operator, if that's clearer for you:
yourObjectList = yourObjectList.
OrderBy(Function(o) If(o.Id = 0, 1, 0)).
ThenBy(Function(o) o.Id).
ToList()
The If
-operator it treats Id's with zero as 1
and all others as 0
, so the <> 0
will come first.