У меня есть сущность Order
с двумя основными столбцами с именами UserId
и CreationTimeUtc
. Я пытаюсь выбрать последний Order
для каждого пользователя (конечно, на основе столбца UserId
). Обычно я ожидаю сделать это путем группировки и упорядочения. Вот что я попробовал:
var q = _context.Orders.AsNoTracking()
.Where(t => t.CreationTimeUtc > SomeDate)
.GroupBy(t => t.UserId)
.Select(g => g.OrderBy(t => t.CreationTimeUtc).First())
.Skip(10)
.Take(10)
.ToList();
Но выполнение запроса вызывает эту ошибку:
System.InvalidOperationException: выражение LINQ '(GroupByShaperExpression: KeySelector: (r. UserId), ElementSelector: (EntityShaperExpression: EntityType: Order ValueBufferExpression: (ProjectionBindingExpression: EmptyProjectionMember) IsNullable: False)
Я много гуглил и, похоже, EF Core не поддерживает группировку! Это правда? И если да, то как я могу решить эту проблему? Нужно ли загружать все строки в память или есть какой-нибудь способ на основе LINQ? Есть идеи? Заранее спасибо.
Я использую EF Core 3.1
, ASP.NET Core 3.1
, Npgsql 3.1
, PostgreSQL 12
и C# 8
.