Как выразить в LINQ предложение SQL OrderBy над двумя полями - PullRequest
6 голосов
/ 21 марта 2012

Мне нужно написать следующий оператор SQL в LINQ lambdas :

SELECT *
FROM product
ORDER BY ProductScore DESC, ProductID ASC

Я думаю, этот код:

product.OrderByDescending(m => m.ProductScore).OrderBy(m => m.ProductId)

это не эквивалентно, так как второй OrderBy будет перезаписывать первый. Есть ли эквивалент? Спасибо

Ответы [ 4 ]

12 голосов
/ 21 марта 2012

Используйте метод ThenBy :

var query = product.OrderByDescending(m => m.ProductScore)
                   .ThenBy(m => m.ProductId);

Существует также метод ThenByDescending .

3 голосов
/ 21 марта 2012

Да, вы используете ThenBy:

product.OrderByDescending(m => m.ProductScore).ThenBy(m => m.ProductId)

(и аналогично ThenByDescending).Это ссылка Queryable.ThenBy;конечно, есть эквивалент Enumerable.

В выражении запроса это будет:

var query = from product in db.Products
            orderby product.ProductScore descending, product.ProductId
            select product;

ThenBy и ThenByDescending может только бытьпозвонил по номеру IOrderedQueryable / IOrderedEnumerable ... для получения дополнительной информации см. мой пост Edulinq в блоге .

1 голос
/ 21 марта 2012

попробуй

product.OrderByDescending(m => m.ProductScore).ThenBy(m => m.ProductId)
1 голос
/ 21 марта 2012

Использование ThenBy:

var query = db.Products
              .OrderByDescending(m => m.ProductScore)
              .ThenBy(m => m.ProductId);
...