尝试将LINQ到实体与错误的日期结果进行比较

时间:2011-03-14 17:08:32

标签: asp.net vb.net entity-framework entity-framework-4

我有一个简单的If ..然后就是这样:

  If rhcexists.First.SignatureDate > Date.Today.AddMonths(-6) Then
  End If

rhcexists是对实体模型的简单查询:

Dim rhcexists = From p In dbContracts.Signatures _
                    Where p.StudentID = CStr(Session("people_code_id")) _
                    And p.ContractType = "rhc" _
                    Order By p.ID Descending _
                    Select p

问题是此比较会导致错误:

  

LINQ to Entities无法识别方法'System.Object get_Item(System.String)'方法,并且此方法无法转换为商店表达式。

这发生在If子句中。任何想法为什么会发生这种情况以及如何解决它?

我正在使用ASP.NET 4,EF 4和VS 2010 SP1。

1 个答案:

答案 0 :(得分:2)

问题出在您的查询中。在if语句中抛出异常,因为查询的执行将延迟到需要运行。问题在于

Session("people_code_id")

LINQ查询中的所有内容都需要转换为SQL才能进行查询。实体框架无法将会话项getter转换为SQL,因此会引发异常。尝试在查询之前将其拉出到变量中,如下所示:

Dim peopleCodeId = CStr(Session("people_code_id"))
Dim rhcexists = From p In dbContracts.Signatures _
                    Where p.StudentID = peopleCodeId _
                    And p.ContractType = "rhc" _
                    Order By p.ID Descending _
                    Select p

(我的VB.NET有点生疏,但我认为这是正确的)