Вот SQL-подобный способ:
var categories =
from p in products
group p by p.Category into g
select new { Category = g.TheKey, LatestProduct = g.Max(p => p.TimeStamp) };
Это лямбда-путь (предупреждение, не проверено):
var categories = products.GroupBy(p => p.Category)
.Select(g => new { Category = g.TheKey,
LatestProduct = g.Max(p => p.TimeStamp)});
Примечание на Categories.Include("Products")
, вы неЭто не нужно в вашем примере.Вы используете «Включить» для быстрой загрузки, так что, например, если у вас был список категорий, возвращенных из EF, при выполнении Categories.Product вы получите соответствующий продукт.
Но все, что вам нужно, этосписок категорий и отдельный продукт для каждой из них - который уже возвращен в приведенном выше запросе LINQ, поэтому нет необходимости включать.