我的印象FirstOrDefault(lambda)是对集合的影响与Where(lambda).FirstOrDefault()LINQ to EF 中的相同。然后我在代码中发现了这个问题,以便从我的数据库中查找指定年份最近创建的项目
Private Function MostRecentItemByYear(year As Integer) As Item
Dim jan1 As New Date(year, 1, 1)
Dim dec31 As New Date(year, 12, 31)
Return MyContext.Items.OrderByDescending(Function(i) i.DateCreated) _
.FirstOrDefault(Function(i) i.DateCreated.HasValue AndAlso i.DateCreated >= jan1 AndAlso i.DateCreated <= dec31)
End Function
该代码失败
无法创建类型为“MyCompany.Domain.Models.Item”的常量值。此上下文仅支持原始类型或枚举类型。
上Return MyContext ...线。但是,如果我将 lambda 移动到 aWhere并FirstOrDefault单独调用,它会完美运行。
Private Function MostRecentItemByYear(year As Integer) As Item
Dim jan1 As New Date(year, 1, 1)
Dim dec31 As New Date(year, 12, 31)
Return MyContext.Items.OrderByDescending(Function(i) i.DateCreated) _
.Where(Function(i) i.DateCreated.HasValue AndAlso i.DateCreated >= jan1 AndAlso i.DateCreated <= dec31) _
.FirstOrDefault()
End Function