我有一个项目列表,我想创建两种排序方式,按字母顺序和上次修改时间。 这是我所做的: 而且效果很好。 我的问题是我希望除了列表中的所有项目都发生这种情况。 这一项将始终不变,我想确保它始终在列表的顶部。 为此我需要做什么? 如果重要,则c#是lang。 感 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我试图找出自定义排序列表的最佳方法。 假设T是一个具有日期(DateTime?)属性和状态(字符串)属性的对象。
我有3个案例......
“紧急”:我希望这些在列表的顶部,没有特别的顺序
date = null
status =“紧急”
“正常”:我希望在紧急案件之后按日期排序
date =任何有效的日期/时间
status =“准时”
“稍后”:我希望这些在列表的底部,没有特定的顺序
date = null
status =“稍后”
有什么想法吗? 我应该使用IQuerable对象而不是List吗? 我总是可以.ToList()稍后将对象发送到我的视图。
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);
随机沉思:Ordering是属于查询还是属于类?
不应该太困难,只需使用比较规则使T
实现IComparable
,就应该设置。
您需要提供IComparer的实现,然后您可以使用以下重载传递它:
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
IComparer<TKey> comparer
)
请参阅: http : //msdn.microsoft.com/en-us/library/bb549422.aspx
我认为最简单的方法是使用linq:
itemsList = itemsList.OrderByDescending(ob => ob.status ).ThenBy(ob => ob.date).ToList();
您可以使用扩展方法:
像这样......
public static IOrderedEmumerable<MyType> OrderForDisplay (this IEnumerable<MyType> input)
{
return
input
.OrderBy(item => item.Status)
.ThenByDescending(item => item.Status == 1 ? DateTime.MaxDate : item.date);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.