如何在Linq查询中包含OrderBy

本文关键字:包含 OrderBy 查询 Linq | 更新日期: 2023-09-27 18:21:14

我想在SelectionName上应用OrderBy Ascending,通过在radcombobox 中排序项目

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

如何在Linq查询中包含OrderBy

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());

这将有所帮助:

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

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

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

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

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

更新

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

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);