首页 > 解决方案 > 如何在 C# 中聚合 order by?

问题描述

所以我有一个像下面这样的函数,它接收一个对象列表并将它们包含在我的查询字符串中。这很好用。

query = includeExpressions.Aggregate(query, (current, include) => current.Include(include));

但我想要做的是也聚合 OrderBys。这是我遇到问题的地方。我遇到的问题是必须使用OrderBy然后在同一行上使用ThenBy 。我尝试使用 for 循环第一项使用顺序,然后使用 thenby。我遇到的问题是,为了激活 thenby,order by 需要在同一对象行上进行。

query.OrderBy(orderBy).ThenBy

我不能做

var usedOrderBy = true;
        foreach (var orderBy in orderBys)
        {
            if (usedOrderBy)
            {
                query = query.OrderBy(orderBy);

                usedOrderBy = true;
            }
            else
            {
                query = query.ThenBy(orderBy); // <-- Can not locate thenby
            }
        }

any ides.

我想像

orderItems(x => x.Item1, x => x.Item2)

标签: c#entity-frameworkaggregate

解决方案


问题在于query变量的类型。ThenBy是可以应用的扩展方法,System.Linq.IOrderedEnumerable<TSource>所以System.Linq.IOrderedQueryable<TSource>你不能只做

IEnumerable<Point> points = GetPoints();
points = points.OrderBy(p => p.X);
points = points.ThenBy(p => p.Y);

您应该有一个额外的变量用于预排序结果来解决您的场景,如下例所示:

IEnumerable<Point> points = GetPoints();
var orderedPoints = points.OrderBy(p => p.X);
orderedPoints = orderedPoints.ThenBy(p => p.Y);

推荐阅读