【发布时间】:2016-06-12 21:38:12
【问题描述】:
作为复杂查询的一部分,我需要找到一组按 ID 分组的实体框架记录的最短日期。
所以我的 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() 实现集合时,我看到了以下异常:
抛出异常:System.Data.Entity.dll 中的“System.NotSupportedException”
附加信息:无法创建类型的常量值 '我的课'。只有原始类型或枚举类型是 在这种情况下支持。
我进行了一番挖掘,并认为我理解 EF 在比较“MyClass”时遇到了问题,因为它无法将其转换为 SQL'y。但我不确定这个查询的哪个方面导致了问题。
我看过一些类似的帖子,但不是一个真正点头的例子,我想更好地了解解决问题的原因。
【问题讨论】:
-
您确定这是您的错误所在吗?
records是原始表数据还是后续查询? -
我无法重现该问题,因为此代码对我来说很好!你能展示你如何初始化
records吗? -
就我而言,records 是一个 IQueryable
,我将它作为参数传递给方法。我在方法外创建了记录 var,方法是在传入之前简单地执行 context.MyClassescontext.MyClasses的类型,它是来自 EF 上下文的 ObjectSet。
标签: c# entity-framework linq linq-to-entities