我的印象FirstOrDefault(lambda)
对LINQ to EF中Where(lambda).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) _
.FirstOrDefault(Function(i) i.DateCreated.HasValue AndAlso i.DateCreated >= jan1 AndAlso i.DateCreated <= dec31)
End Function
该代码以
失败在无法创建“MyCompany.Domain.Models.Item”类型的常量值。在此上下文中仅支持原始类型或枚举类型。
Return MyContext ...
行上。但是,如果我将lambda移动到Where
并单独调用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