Вот что сработало для меня:
var ts = new[] { new T(1,1), new T(1,2), new T(2,1), new T(2,2), new T(2,3) };
var q =
from t in ts
group t by t.ID into g
let max = g.Max(x => x.Seq)
select g.FirstOrDefault(t1 => t1.Seq == max);
(Просто нужно применить это к вашей таблице данных, но запрос остается примерно таким же)
Обратите внимание, что с вашим текущим методом, потому чтовы перебираете все записи, вы также получаете все записей из хранилища данных.Используя такой запрос, вы разрешаете переводить в запрос к хранилищу данных, которое не только быстрее, но и возвращает только те результаты, которые вам нужны (при условии, что вы используете Entity Framework или Linq2SQL).