2010-09-09 2 views
0

Я использую структуру сущности для подключения базы данных.Вернуть все строки, имеющие максимальное значение

У меня есть таблица (Давайте называть его «Файл»), что имущие несколько полей:

ID, версия, XYZ ключ Primarky основан на ID и версии. , поэтому у меня может быть несколько строк с одинаковыми идентификаторами, но с другой версией (и наоборот).

Возникает вопрос:

Как я могу, с выражением LAMBDA, спросите мою Entity Framework, чтобы вернуть мне всю последнюю версию «файл».

Пример: Datas:

ID;Version;Other 
1;1;YX 
1;2;YZ 
2;1;AH 
2;2;BH 
2;5;CA 
1;3;AAA 

Результат:

1;3;AAA 
2;5;CA 

Спасибо!

!! Цель состоит в том, что базе данных не нужно возвращать все строки и вызывается только один раз, поэтому забудьте решение, подобное GetAllRows, и прочитайте всю коллекцию и сохраните только последние версии, или получите список всех возможных ID и получите последний версия foreach в другом запросе. Благодаря!

+0

Вы явно просите выражение лямбда, почему? –

+0

Потому что весь проект использует это, но это только бонус;) – J4N

+0

Если ответ, который я дал, был прав, можете ли вы отметить его как ответ? –

ответ

1

Вы можете использовать следующий LinqToEntites запрос для этого:

var result = from f in myEntities.Files 
      group f by f.ID into g 
      select g.OrderByDescending(f => f.Version).FirstOrDefault(); 

Было бы, возможно, более целесообразно использовать First вместо FirstOrDefault, но тогда вы получите UnsupportedException:

Метод «Первый 'может использоваться только как окончательная операция запроса. Вместо этого рассмотрите метод «FirstOrDefault»

+0

Отлично, и я получу целую «сущность» или просто «f.Id», которая была включена в условие группы? – J4N

+0

Этот запрос возвращает весь объект. Переменная 'g' на самом деле является' IEnumerable 'с одним дополнительным свойством:' Key'. –

Смежные вопросы