gpt4 book ai didi

c# - Silverlight - C# 和 LINQ - 按多个字段排序

转载 作者:行者123 更新时间:2023-11-30 21:22:01 25 4
gpt4 key购买 nike

我有一个任务对象的 ObservableCollection。每个任务都具有以下属性:

  • 分配给
  • 类别
  • 职位
  • 分配日期

我为用户提供了一个界面来选择他们要根据哪些字段进行排序。在某些情况下,用户可能希望最多按这些属性中的三个进行排序。如何动态构建 LINQ 语句,使我能够按所选字段按升序或降序排序?

目前,我正在尝试以下操作,但它似乎只按最后应用的排序进行排序:

var sortedTasks = from task in tasks
select task;

if (userWantsToSortByAssignedTo == true)
{
if (sortByAssignedToDescending == true)
sortedTasks = sortedTasks.OrderByDescending(t => t.AssignedTo);
else
sortedTasks = sortedTasks.OrderBy(t => t.AssignedTo);
}

if (userWantsToSortByCategory == true)
{
if (sortByCategoryDescending == true)
sortedTasks = sortedTasks.OrderByDescending(t => t.Category);
else
sortedTasks = sortedTasks.OrderBy(t => t.Category);
}

是否有一种优雅的方式将顺序子句动态附加到 LINQ 语句?

最佳答案

您可以使用 ThenBy 而不是 OrderBy 来应用多个排序。不过,您需要在开始时使用 OrderBy(x => 1) 来启动该过程。

var sortedTasks = from task in tasks
orderby 1
select task;

if (userWantsToSortByAssignedTo)
{
if (sortByAssignedToDescending)
sortedTasks = sortedTasks.ThenByDescending(t => t.AssignedTo);
else
sortedTasks = sortedTasks.ThenBy(t => t.AssignedTo);
}

if (userWantsToSortByCategory)
{
if (sortByCategoryDescending)
sortedTasks = sortedTasks.ThenByDescending(t => t.Category);
else
sortedTasks = sortedTasks.ThenBy(t => t.Category);
}

关于c# - Silverlight - C# 和 LINQ - 按多个字段排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2443416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com