Запрос C # LINQ (MYSQL EF) - Отдельные и последние записи

У меня есть таблица, назовем ее Record. Содержит: ID (int) | CustID (int) | Время (datetime) | Данные (varchar)

Мне нужна последняя (самая последняя) запись для каждого клиента:

SQL

select * from record as i group by i.custid having max(id);

LINQ версии 1

dgvLatestDistinctRec.DataSource = from g in ee.Records
                                  group g by g.CustID into grp
                                  select grp.LastOrDefault();

Это вызывает ошибку:

System.NotSupportedException не обработано кодом пользователя Сообщение = LINQ to Entities не распознает метод 'Faizan_Kazi_Utils.Record LastOrDefault [Запись ] (System.Collections.Generic.IEnumerable`1 [Faizan_Kazi_Utils.Record ]) ', и этот метод нельзя перевести в хранилище выражение. Source = System.Data.Entity

LINQ версии 2

var list = (from g in ee.Records
            group g by g.CustID into grp
            select grp).ToList();
Record[] list2 = (from grp in list
                  select grp.LastOrDefault()).ToArray();
dgvLatestDistinctRec.DataSource = list2;

Это работает, но неэффективно, поскольку загружает ВСЕ записи из базы данных в память, а затем извлекает только последний (самый последний член) каждой группы.

Есть ли какое-либо решение LINQ, которое приближается к эффективности и удобочитаемости упомянутого решения SQL?

5
задан Yuck 30 August 2011 в 12:44
поделиться