2012-03-21 99 views
8

我在代码隐藏文件的asp.net页面上有一段代码。我决定将它移入模块中的公共子程序(general_functions.vb)。然而,一旦我这样做了,代码就不再起作用 - 它会抛出一个错误。LINQ to Entities无法识别方法System.ObjectCompareObjectEqual

在原有代码隐藏我取代了原来的代码的调用,像这样:

DeleteResidency(people_id, semester, year) 

现在在我的general_functions.vb我创建了一个公用子程序一样如下:

Public Sub DeleteResidency(delpeople_id, delsemester, delyear) 
    Using dbContext as pbu_housingEntities = New pbu_housingEntities 
     Dim remove_selection = (From p in dbContext.Residents _ 
           Where p.people_code_id = delpeople_id _ 
           Where p.year = delyear _ 
           Where p.semester = delsemester _ 
           Order By p.id Descending _ 
           Select p).FirstOrDefault 
    End Using 
End Sub 

有是比它更多的代码,但上面的代码是抛出错误的代码。我得到的错误是:

LINQ到实体无法识别方法“System.Object的 CompareObjectEqual(System.Object的,System.Object的,布尔型)”的方法,并 这种方法不能被翻译成店表达。

谁能帮我理解为什么会发生这种情况吗?

+2

'学期'的类型是什么? – Eranga 2012-03-21 00:33:44

+0

所有值都被转换为字符串。 – davemackey 2012-03-21 00:40:49

+3

我怀疑你的where条件有一些非原始类型的比较。 – Eranga 2012-03-21 00:55:47

回答

10

在DeleteResidency子例程的定义中明确输入参数。这样编译器就可以更少地推断和防止这些类型的错误。

相关问题