У меня есть таблица, давайте назовем ее Запись. Содержит:
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 не было обработано кодом пользователя Message = LINQ
Объектам не распознается метод 'Faizan_Kazi_Utils.Record
LastOrDefault [Record
] (System.Collections.Generic.IEnumerable`1 [Faizan_Kazi_Utils.Record
]) ', и этот метод нельзя перевести в магазин
выражение. Источник = 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?