【问题标题】:How to include OrderBy in Linq Query如何在 Linq Query 中包含 OrderBy
【发布时间】:2014-09-10 07:34:22
【问题描述】:

我想在 SelectionName 上应用 OrderBy Ascending,然后对 radcombobox 中的项目进行排序

dropDown.Items.AddRange(items.Select(x => new RadComboBoxItem(x.SelectionName, x.SelectionValue)).ToArray());

【问题讨论】:

  • ToArray()之前添加OrderBy.OrderBy(x => x.selectionName)在你的情况下
  • 谢谢它的工作,你能告诉我如何在 OrderBy 子句中包含多个参数,即我想在查询中使用 OrderBy(SelectionName,SortOrder)
  • 请查看我对多个排序列的回答。

标签: c# sql-server linq radcombobox


【解决方案1】:
dropDown.Items.AddRange(items
  .OrderBy(x => x.SelectionName)
  .Select(x => new RadComboBoxItem(x.SelectionName, x.SelectionValue))
  .ToArray());

正如您评论的那样,您希望按其他值排序,您可以使用.ThenBy(x => x.Value)

在你的情况下;

dropDown.Items.AddRange(items
  .OrderBy(x => x.SelectionName)
  .ThenBy(x => x.SortOrder)
  .Select(x => new RadComboBoxItem(x.SelectionName, x.SelectionValue))
  .ToArray());

【讨论】:

  • 这不起作用。 RadComboBoxItem 没有SelectionName 属性。使用其Text 属性或对源集合进行排序,而不是对生成的 RadComboBoxItems 进行排序
  • 在创建 RadComboBoxItems 之前通过订购修复。
【解决方案2】:

这会有所帮助:

dropDown.Items.AddRange(items
  .Select(x => new RadComboBoxItem(x.SelectionName, x.SelectionValue))
  .OrderBy(x => x.SelectionName)
  .ToArray());

【讨论】:

  • 这不起作用。 RadComboBoxItem 没有SelectionName 属性。使用其Text 属性或对源集合进行排序,而不是对生成的 RadComboBoxItems 进行排序
【解决方案3】:

您可以在将项目添加到组合框之前对其进行排序:

dropDown.Items.AddRange(items
    .OrderBy(x=>x.SelectionName)
    .Select(x=>new RadComboBoxItem(x.SelectionName,x.SelectionValue)
    .ToArray());

您可能不需要调用ToArray(),因为AddRange 可以与IEnumerable 一起使用。我没有检查所有 RadComboBox 类,但至少AJAX version 可以与IEnumerable 一起使用。

更好的选择是使用您平台中的绑定支持(ASP.NET、WPF、Windows 窗体?)将您的组合绑定到有序可枚举项,而不是构造原始组合框项。

更新

要按多个字段排序,请使用带有所需字段的匿名类型,例如:

dropDown.Items.AddRange(items
    .OrderBy(x=>new {x.SortOrder,x.SelectionName})
    ...

OrderBy 的参数是一个创建订单键的 lambda 函数

当您指定x=>x.SelectionName 时,您指定的函数接收x 项并返回SelectionName 属性的内容作为键。

当您键入x=>new {x.SortOrder,x.SelectionName} 时,您指定的函数返回一个匿名类型,其中的字段由SortOrderSelectionName 参数填充。

在这种情况下,使用 LINQ 语法而不是 LINQ 方法更清楚。同样的代码可以写成:

var orderedItems=from item in items
                 orderby item.SortOrder,item.SelectionName
                 select new RadComboBoxItem(item.SelectionName,item.SelectionValue);
dropDown.Items.AddRange(orderedItems);

【讨论】:

  • 谢谢它正在工作,你能告诉我如何在 OrderBy 中包含多个参数,即 OrderBy(SortOrder,SelectionName)
  • 将字段作为匿名类型返回,例如OrderBy(x=>new {x.SortOrder, x.SelectionName})
猜你喜欢
  • 1970-01-01
  • 2016-10-29
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 2021-12-11
  • 1970-01-01
相关资源
最近更新 更多