我有一个简单的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。
答案 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有点生疏,但我认为这是正确的)