我正在尝试找出自定义列表排序的最佳方法。假设 T 是一个具有 date(DateTime?) 属性和 status(string) 属性的对象。
我有3个案例...
“紧急”:我希望这些位于列表顶部,没有特定顺序
日期=空
状态=“紧急”
“正常”:我希望在紧急情况之后按日期订购这些
日期 = 任何有效日期/时间
状态=“准时”
“稍后”:我希望这些位于列表底部,没有特定顺序
日期=空
状态=“稍后”
有什么想法吗?我应该使用 IQuerable 对象而不是 List 吗?我始终可以稍后将对象发送到我的视图。
query = query.OrderBy(x =>
x.Status == "Urgent"
? 1
: x.Status == "Normal"
? 2
: 3)
.ThenBy(x =>
x.Status == "Urgent"
? null
: x.Status == "Normal"
? x.Date
: null);
随机思考:排序属于查询,还是属于类?
您可以只使用扩展方法:
类似这样的事情...
public static IOrderedEmumerable<MyType> OrderForDisplay (this IEnumerable<MyType> input)
{
return
input
.OrderBy(item => item.Status)
.ThenByDescending(item => item.Status == 1 ? DateTime.MaxDate : item.date);
}
您需要提供 IComparer 的实现,然后可以使用以下重载传递它:
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
IComparer<TKey> comparer
)
我认为最简单的方法是使用 linq :
itemsList = itemsList.OrderByDescending(ob => ob.status ).ThenBy(ob => ob.date).ToList();