【发布时间】:2020-10-22 06:03:52
【问题描述】:
我想查询具有不同 RailcarNumber 列的 StorageDetails 表。在 RailcarNumber 重复的地方,我只想要最新的。
我尝试过这样的事情:
var details = DbContext.StorageDetails
.Where(d => railcars.Contains(d.RailcarNumber))
.OrderByDescending(d => d.Id)
.GroupBy(d => d.RailcarNumber)
.Select(g => new
{
RailcarNumber = g.Key,
Details = g.First()
})
.ToList();
但它抱怨 First() 的引用。
LINQ 表达式 '(GroupByShaperExpression:
KeySelector: (s.RailcarNumber),
ElementSelector:(EntityShaperExpression:
实体类型:StorageDetail
值缓冲区表达式:
(ProjectionBindingExpression: EmptyProjectionMember)
IsNullable: 假
)
) .First()' 无法翻译。以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。请参阅https://go.microsoft.com/fwlink/?linkid=2101038 了解更多信息。
我不知道我还能怎么做我需要的。 Distinct() 似乎没有任何关于它选择哪一个的选项。
【问题讨论】:
-
您使用的是哪种第一种方法?它看起来不像 LINQ First,因为它需要一个参数,那是自定义方法吗?
-
@SelmanGenç:对不起,这是尝试
Take(1)时留下的。 -
尝试在 GroupBy 之后添加 .AsEnumerable,查询的 Select 部分将在内存而不是 DB 中计算。
-
@JonathanWood 无法将其转换为 SQL。在分组后添加一个 As Enumerable 并从内存中提取投影
-
@Nkosi:调用
AsEnumerable()会删除所有匹配的行,这超出了我的需要。我知道 SQL Server 可以进行子查询。似乎应该有办法做到这一点。
标签: c# .net linq .net-core entity-framework-core