asp.net - 按通用对象的多个值和特定值对泛型对象的通用列表进行排序

  显示原文与译文双语对照的内容

这个问题已经有了如下答案:

有两个通用的检查员和 InspectorRates 。

RateType有三个不同的值( 0 = 不选择,1 = 日速率,2 = 小时速率) 。

我想让所有的检验员先按日期类型,然后按最低速率。 如果用户选择选项"每小时速率",则需要按小时速率和thenlowest速率对列表进行排序。 非seleted速率始终位于底部。

enter image description here

enter image description here

我试过 LINQ,但它不工作。


listI.OrderBy(Function(i) i.DefaultRate.RateType = Rates.RateTypeEnum.Day_Rate).ThenBy(Function(i) i.DefaultRate.Rate)

时间: 原作者:

你可以使用 OrderByThenBy 来提供基于优先级的搜索标准


 List<Inspector> list = new List<Inspector>();

 list.Add(new Inspector() { RateType = 0, Rates = 0 });
 list.Add(new Inspector() { RateType = 0, Rates = -1 });
 list.Add(new Inspector() { RateType = 1, Rates = 1 });
 list.Add(new Inspector() { RateType = 1, Rates = -2 });
 list.Add(new Inspector() { RateType = 1, Rates = 3 });
 list.Add(new Inspector() { RateType = 2, Rates = 9 });
 list.Add(new Inspector() { RateType = 2, Rates = -2 });

 var sortedList = list
. OrderByDescending(i => i.RateType == 1)
. ThenBy(i => i.Rates).ToList();

输出:


//RateType = 1, Rates = -2
//RateType = 1, Rates = 1
//RateType = 1, Rates = 3
//RateType = 2, Rates = -2
//RateType = 0, Rates = -1
//RateType = 0, Rates = 0
//RateType = 2, Rates = 9

下面是 Inspector 类定义:


public class Inspector
{
 public int RateType { get; set; }
 public int Rates { get; set; }
 public int InspectorId { get; set; }

 public override string ToString()
 {
 return string.Format("Type:{0}, Rate:{1}", RateType, Rates);
 }
}

原作者:
...