我们有一个通用List(Of Product),必须在Product类的两个或多个属性上进行排序。
产品类具有属性“Popular”数字(asc),“Clicked”数字(desc),“Name”字符串(asc)。为了命名属性,我们希望列表排序。
如何用lamba语句排序?如果发现基于一个属性对列表进行排序。
答案 0 :(得分:32)
编辑刚刚意识到这是一个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#版本。请尝试以下
var list = GetSomeList();
var sorted = list.OrderBy(x => x.Popular).ThenBy(x => x.Clicked).ThenBy(x => x.Name);
答案 1 :(得分:5)
回答关于lambda表达式的问题,这个问题过于复杂,无法放入lambda表达式,因为VB不支持多行lambda表达式。
对于非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)
答案 2 :(得分:4)
List<Product> sortedProducts = null;
sortedProducts = products.OrderBy(p => p.Popular)
.ThenByDescending(p => p.Clicked)
.ThenBy(p => p.Name)
.ToList();
答案 3 :(得分:3)
对不起,你知道任何C#吗?
products.OrderBy(p => p.Popular).
ThenByDescending(p => p.Clicked).
ThenBy(p => p.Name);
你能从中获得所需的东西吗?
答案 4 :(得分:0)
也可以使用List.Sort lambda函数完成复合排序。这是一个vb.Net示例:
Dim Conts As List(of clsContact)
Conts.Sort(Function(C1 As clsContact, C2 As clsContact)
Dim CompRes As Integer = C1.Contact_LastName.CompareTo(C2.Contact_LastName)
If CompRes = 0 Then
CompRes = C1.Contact_FirstName.CompareTo(C2.Contact_FirstName)
End If
Return CompRes
End Function)