我的印象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