Как сказал Стив, ваш SQL недопустим без Property1 и т. Д. В агрегатном предложении. Однако, мне кажется, что вы пытаетесь получить данные для тех «строк», где дата равна максимальной дате для группы «строк» по Id?
Это работает так:
recs.GroupBy(r => r.Id).SelectMany(g => g.Where(r => r.Date == g.Max(a => a.Date)))
Группирует по Id, получает IEnumeration элементов, дата которых совпадает с максимальной датой для этой группы, и объединяет их в единый IEnumeration - который затем может быть повторен или что угодно.
Редактировать: Кстати, в синтаксисе запросов лучшее, что я могу сделать (заняло у меня некоторое время ...), это что-то вроде:
from r in recs
where r.Date ==
(from sr in recs
where sr.Id == r.Id
select sr.Date).Max()
select r;
Редактировать 2:
Что на самом деле больше похоже на:
recs.Where(r => r.Date == recs.Where(sr => sr.Id == r.Id).Max(a => a.Date)).Select(r => r)
в свободном синтаксисе, который выглядит не так хорошо, как в первый раз, когда я это сделал ... Мне не очень нравится синтаксис выражений запросов, что забавно, потому что я чувствую себя свободно с SQL, и синтаксис запросов предполагается быть более похожим на SQL.