преобразовать SQL в LINQ или улучшить мой запрос, пожалуйста

2

Я пытаюсь конвертировать sql в лямбду или LINQ, но пока не могу упростить

Мне удалось сделать это две разные лямбда, но я хочу, чтобы это один запрос.

SQL-запрос это:

  SELECT PamID, MAX (MaxAmount)
    FROM RebateTable
GROUP BY PamID

пока это работает, но есть ли лучший способ.

var t = from r in RebateList
    group r by r.PamID;
var x = from y in t
    select new RebateMaxClass
    {
        PamId = y.Key,
        TotalSale = y.Max(s => s.MaxAmount)
    };
  • 0
    Насколько я знаю, вы можете использовать group r by r.PamID into y вместо group r by r.PamID into y .
  • 0
    Я думаю, что вы можете попробовать использовать Linqer для преобразования SQL в LINQ sqltolinq.com
Теги:
linq
lambda

3 ответа

3

Вы можете использовать эту форму:

RebateTable.GroupBy(r=>r.PamId).Select(s=>new RebateMaxClass
    {
        PamId = s.Key,
        TotalSale = s.Max(y => y.MaxAmount)
    };
  • 1
    Спасибо за помощь NoImagination.
1

Запрос выглядит хорошо. Вы можете сформировать один запрос, как это:

var t = from r in RebateList
        group r by r.PamId into y
        select new
        {
            PamId = y.Key,
            TotalSale = y.Max(s => s.MaxAmount)
        };

Но это не быстрее. Запрос расширен и будет выполняться до тех пор, пока не должен.

Альтернативой является формирование "нового стиля LinQ":

var t2 = RebateList.GroupBy(g => g.PamId) // Do a Grouping
var t3 = t2.Select(s => new { PamId = s.Key, TotalSale = s.Max(m => m.MaxAmount) });
  • 0
    Спасибо, Кара, твой ответ правильный, но ответ NoImagination кажется немного лучше ... Я хотел бы выбрать 2 ответа как правильные.
  • 0
    @AliAzra Jop - идеальный ответ от Nolmagination. Но имейте в виду, что исполняемый код одинаков. Разделение запроса для лучшей читаемости иногда является хорошей вещью.
Показать ещё 1 комментарий
0

Вы можете переписать свой собственный запрос, как этот.

var t = from r in RebateList
group r by r.PamID into y
select new RebateMaxClass
{
    PamId = y.Key,
    TotalSale = y.Max(s => s.MaxAmount)
};

Просто :)

Ещё вопросы

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