【发布时间】:2014-02-25 09:44:50
【问题描述】:
是否可以使用 LINQ 使用不同的 orderby 子句对组进行排序?例如,我想在一组中对结果进行升序排序,然后在另一组中使用确定排序方向的属性以降序排序。
我可以通过遍历组并在组上应用排序来做到这一点,但是我的问题是这是否可以作为原始 LINQ 查询的一部分来完成?这样做会对性能产生负面影响吗?
【问题讨论】:
-
从哪里提取“确定排序方向的属性”?这对于它的工作方式至关重要。
是否可以使用 LINQ 使用不同的 orderby 子句对组进行排序?例如,我想在一组中对结果进行升序排序,然后在另一组中使用确定排序方向的属性以降序排序。
我可以通过遍历组并在组上应用排序来做到这一点,但是我的问题是这是否可以作为原始 LINQ 查询的一部分来完成?这样做会对性能产生负面影响吗?
【问题讨论】:
如果您在组中有某种属性可用于排序,那么是的,它可以一次性完成。例如,此代码将按int 属性分组,并根据值是正数还是负数来确定排序类型
var query = from i in someTable
group i by i.SomeIntProperty into g
let sortAsc = g.Key % 2 == 0
select new
{
Key = g.Key,
Results = sortAsc ? g.OrderBy(x => x.SomeProperty) :
g.OrderByDescending(x => x.SomeProperty)
}
【讨论】: