如何在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());
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}
时,指定一个函数,该函数返回一个匿名类型,其中字段由SortOrder
和SelectionName
参数填充。
在这种情况下,使用LINQ语法而不是LINQ方法会更清楚。相同的代码可以写成:
var orderedItems=from item in items
orderby item.SortOrder,item.SelectionName
select new RadComboBoxItem(item.SelectionName,item.SelectionValue);
dropDown.Items.AddRange(orderedItems);