gpt4 book ai didi

c# - LINQ 查询以从分组中查找最小值 - 无法创建类型为 'X' 的常量

转载 作者:太空宇宙 更新时间:2023-11-03 15:25:01 25 4
gpt4 key购买 nike

作为复杂查询的一部分,我需要找到一组按 Id 分组的 Entity Framework 记录的最小日期。

所以我的 EF 类可能是:

public MyClass {
public int Id { get; set; }
public DateTime CreatedDate { get; set; }
}

我的数据可能是这样的:

Id     CreatedDate
1 2012-01-01
1 2012-02-01
2 2013-01-01
2 2015-05-01

我正在尝试按 Id 属性对数据进行分组,然后为每个分组选择最小的 CreatedDate

我认为这应该很简单!并写道:

var firstThing = (from r in records
group r by r.Id into grp
select new {
Id = grp.Key,
CreatedDate = grp.Min(x => x.CreatedDate)
}).ToList();

但在我使用 .ToList() 实现集合时,我看到了以下异常:

Exception thrown: 'System.NotSupportedException' in System.Data.Entity.dll

Additional information: Unable to create a constant value of type 'MyClass'. Only primitive types or enumeration types are supported in this context.

我仔细研究了一下,认为我明白 EF 在对“MyClass”进行比较时遇到了麻烦,因为它无法将其转换为 SQL'y。但我不确定此查询的哪个方面导致了问题。

我看过一些类似的帖子,但不是一个很好的例子,我想更好地了解解决问题的原因。

最佳答案

我认为您不能在 Linq-to-Entities 查询中使用像 Min 这样的函数。

我要解决这个问题的方法是按 CreatedDate 对每个组进行排序,然后选择第一项。我最熟悉 Fluent 语法,所以它看起来像这样,应该很容易转换为您的语法:

var firstThing = records
.GroupBy(r => r.ID)
.Select(grp => grp.OrderBy(r => r.CreatedDate).FirstOrDefault())
.ToList()

关于c# - LINQ 查询以从分组中查找最小值 - 无法创建类型为 'X' 的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35706487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com