【发布时间】:2020-07-24 14:53:04
【问题描述】:
我有一个 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), 元素选择器:(实体形状表达式: 实体类型:订单 值缓冲区表达式: (ProjectionBindingExpression:EmptyProjectionMember) IsNullable: False)
我搜索了很多,似乎 EF Core 不支持分组!这是真的?如果是这样,我该如何解决这个问题?我需要加载内存中的所有行还是有任何基于 LINQ 的方法?你有什么想法吗?提前致谢。
我正在使用EF Core 3.1、ASP.NET Core 3.1、Npgsql 3.1、PostgreSQL 12 和 C# 8。
【问题讨论】:
-
你会考虑使用原始 sql 方法吗?
-
@CaiusJard 我不喜欢使用行 SQL
标签: c# postgresql .net-core entity-framework-core npgsql