У меня есть таблица, назовем ее 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?