LINQ: группировка по нескольким столбцам с максимумом для одного столбца

1

У меня есть запрос ниже в SQL. Пробовал использовать разные параметры в linq, чтобы получить точный результат сопоставления SQL от моего кода Center, вот мой код с использованием linq.

Но это не получилось.

SQL-запрос (который дает правильный результат)

Select prdCode, Max(prdID) from products 
    GROUP BY prdCode
    order by prdCode

Пробовал ниже в linq

from prd in Entities.Products
    where prd.prdEnabled == true
    group prd by new { prd.prdCode, prd.prdID } into gcs 
    select new { prdID = gcs.Key.prdID, prdCode = gcs.Key.prdCode }

Заранее спасибо.

  • 0
    Этот фрагмент кода должен быть попыткой конвертировать SQL в Linq? Если да, то почему запрос LINQ фильтрует продукты по их свойству prdEnabled , а SQL - нет? Они не кажутся эквивалентными вообще
  • 0
    Пожалуйста, измените название вопроса, ответ, который вы приняли, и название вопроса не имеют значения. Ответ не группирует несколько столбцов
Теги:
linq-to-sql

2 ответа

2
Лучший ответ
from prd in Entities.Products
where prd.prdEnabled == true
group prd by prd.prdCode into gcs 
orderby gcs.Key
select new { prdCode = gcs.Key, prdID= gcs.Max(g => g.prdID) }
0

Это должно соответствовать вашему SQL-запросу

Entities.Producs.Where(prod=> prod.prdEnabled)
                .GroupBy(prod => prod.prdCode)
                .Select(group => new{ prdCode = group.Key, prdID = group.Max(prod => prod.prdID) } )
                .OrderBy(x => x.prdCode);
  1. Отфильтруйте продукты по свойству prdEnabled
  2. Группируйте продукты по их коду
  3. Для каждой группы выберите код и максимальный идентификатор
  4. Сортировать по коду

Ещё вопросы

Сообщество Overcoder
Наверх
Меню