我试图找出自定义排序列表的最佳方法。 假设T是一个具有日期(DateTime?)属性和状态(字符串)属性的对象。

我有3个案例......

“紧急”:我希望这些在列表的顶部,没有特别的顺序
date = null
status =“紧急”

“正常”:我希望在紧急案件之后按日期排序
date =任何有效的日期/时间
status =“准时”

“稍后”:我希望这些在列表的底部,没有特定的顺序
date = null
status =“稍后”

有什么想法吗? 我应该使用IQuerable对象而不是List吗? 我总是可以.ToList()稍后将对象发送到我的视图。

#1楼 票数:38

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是属于查询还是属于类?

#2楼 票数:12 已采纳

不应该太困难,只需使用比较规则使T实现IComparable ,就应该设置。

#3楼 票数:2

您需要提供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

#4楼 票数:1

我认为最简单的方法是使用linq:

itemsList = itemsList.OrderByDescending(ob => ob.status ).ThenBy(ob => ob.date).ToList();

#5楼 票数:0

您可以使用扩展方法:

像这样......

public static IOrderedEmumerable<MyType> OrderForDisplay (this IEnumerable<MyType> input)
{
  return
    input
    .OrderBy(item => item.Status)
    .ThenByDescending(item => item.Status == 1 ? DateTime.MaxDate : item.date);
}

  ask by BZink translate from so

未解决问题?本站智能推荐:

2回复

Asp.net MVC4:自定义分页

我正在尝试为列表生成自定义分页。 我想要的是- -我有一个控制器,该控制器通过使用Take()方法的LINQ查询从数据库仅返回10行。 -加载视图时,它显示10行,接下来我想知道的是分页。 当pagesize设置为10行且超过10行时; 我正在尝试显示数据库的next ,
1回复

让最终用户使用asp.net动态创建自己的自定义查询。

我在这里非常需要一些指导,所以我的大学老师给了我们这个怪异的任务,他希望我们创建一个GUI,该GUI显示数据库中的表,从而使最终用户可以选择想要查询的表。他的桌子他想做什么? 例如,它可能是一条select,update或delete语句,此后,我们必须让他们使用WHERE子句,以便他们可以更
1回复

如何在Linq查询或Linq查询结果中添加自定义项目

好。 我有这个查询。 工作正常。 我在EF中使用代码优先方法。 但是我想添加额外的静态数据,例如输入标签等html标签。 所以我尝试了这样。 但我收到此错误 当前上下文中不存在名称“ ActionButtons”
1回复

搜索列表中列表上的元素

我正在使用Linq查询进行搜索,我有一个列表productList ,我正在搜索一些数据和一部分,我有另一个列表IQProductSkuList到上面的列表。 所以我必须将数据搜索到整个检索到的数据中,但每当我要找到位于另一个列表中的列表时,它会给出如下错误。 无法将类型'Sys
1回复

用linq查找并替换列表的结果

有没有办法在执行 linq 语句后用另一个结果替换一个结果的值? 是在**状态**中的linq语句中,有一些以“PendingForApprover”结果来找我,但我想将其替换为“Pending for Approver”,我希望在获得结果后,您可以使用查找并基于该替换值,之前在我的模型中我使用带有
6回复

如何遍历列表和编辑内容?

现在,我要做的是遍历结果并编辑其所有“名称”内容。 。 一个大概的想法如下: 但这是行不通的。 如何在var结果中编辑内容?
1回复

比较IEnumerable列表,并从该列表之一中删除重复项

我有以下模特班 我将值绑定到它,如下所示。 并比较objassignuser.Viewrlisttry和objassignuser.AssignedViewrlist然后从objassignuser.Viewrlisttry删除重复项,如下所示。 但这不能正常工作
3回复

设置一个列表的特定值

我有两个以下强数据类型的列表(listA和listB): 当在ListA中找到listB的项目时,我需要将ListA的IsEnable设置为true。 并且此比较应该在TagId上进行。 A具有B具有的所有项目。 简而言之,如果B有3个项目,而A有10个项目,那么在这种情况下,我需