FirstOrDefault(lambda)和Where(lambda).FirstOrDefault()的工作方式是否相同?

时间:2013-04-02 14:24:33

标签: entity-framework-4 linq-to-entities

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

0 个答案:

没有答案