单个LINQ查询中的动态order by子句

时间:2014-02-25 09:44:50

标签: c# linq sorting

是否可以使用LINQ使用不同的orderby子句对组进行排序?例如,在一个组中,我希望按升序对结果进行排序,然后在不同的组中按降序排序,方法是使用一个确定排序方向的属性。

我可以通过循环遍历组并对组应用排序来做到这一点,但我的问题是这是否可以作为原始LINQ查询的一部分来完成?这样做会对性能产生负面影响吗?

1 个答案:

答案 0 :(得分:1)

如果你在组中有某种属性可以用来排序,那么它可以一次性完成。例如,此代码将按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)
            }