Как выбрать MAX в подзапросе в Linq to Sql - PullRequest
2 голосов
/ 13 июля 2011

Учитывая следующие данные, как выбрать только последнюю версию для каждого элемента, используя LINQ?

ItemId, Version
===================
A, 1
A, 2
A, 3
B, 8
B, 9,
C, 10
C, 11

Желаемые результаты:

A, 3
B, 9
C, 11

В TSQL я бы сделал что-то вроде этого:

SELECT * FROM MyTable AS Tbl1

WHERE Tbl1.Version = 

(SELECT MAX(Version) 
FROM MyTable 
WHERE MyTable.ItemId = Tbl1.ItemId)

Ответы [ 4 ]

3 голосов
/ 13 июля 2011

Я бы пошел с чем-то вроде:

MyTable
.GroupBy(row => row.ItemId)
.Select(grouping => 
    new
    {   
        ItemId = grouping.Key, 
        Version = grouping.Max(row => row.Version),
    });

РЕДАКТИРОВАТЬ: Исправлен неправильный вывод SQL.

2 голосов
/ 13 июля 2011
        var data = new[] {
            new { item1 = "A", item2 = 1},
            new { item1 = "A", item2 = 2},
            new { item1 = "A", item2 = 3},
            new { item1 = "B", item2 = 8},
            new { item1 = "B", item2 = 9},
            new { item1 = "C", item2 = 10},
            new { item1 = "C", item2 = 11}
        };

        var res = data.GroupBy(el => el.item1).Select(gr => new { item1 = gr.Key, item2 = gr.Max(el => el.item2) });

        foreach (var el in res)
        {
            Console.WriteLine(el.item1 + ": " + el.item2);
        }
0 голосов
/ 13 июля 2011

Если вы предпочитаете синтаксис запроса:

from item in MyDBContext.MyTable
group item by item.ItemId into g
select new { ItemId = g.Key, Version = g.Max(x => x.Version) };
0 голосов
/ 13 июля 2011
select itemid, max(version)
from table
group by itemid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...