2012-03-21 14 views
8

Posiadałem segment kodu na stronie asp.net w pliku z kodem. Postanowiłem przenieść go do publicznego podprogramu w module (general_functions.vb). Kiedy już to zrobiłem, kod przestał działać - powoduje błąd.LINQ to Entities nie rozpoznaje metody System.ObjectCompareObjectEqual

Z oryginalnego kodu z opóźnieniem Wymieniłem oryginalny kod z połączenia tak:

DeleteResidency(people_id, semester, year) 

Teraz w moim general_functions.vb stworzyłem publicznego podprogram jak następuje:

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 

Nie jest więcej kodu niż to, ale powyższy kod jest tym, co rzuca błąd. Błąd pojawia się:

LINQ do podmiotów nie rozpoznaje metoda „System.Object CompareObjectEqual (System.Object, System.Object, Boolean)” metoda i metoda ta nie może być tłumaczone do sklepu wyrażenie.

Czy ktoś może mi pomóc zrozumieć, dlaczego tak się dzieje?

+2

Jaki jest typ "semestru"? – Eranga

+0

Wszystkie wartości są rzutowane jako ciągi. – davemackey

+3

Podejrzewam, że istnieje pewne nietypowe porównanie typów w waszych warunkach. – Eranga

Odpowiedz

10

Jawnie wpisz swoje parametry w definicji procedury dodatkowej DeleteResidency. Pozostawia to mniej, aby kompilator mógł wnioskować i zapobiegać tego typu błędom.

Powiązane problemy