LINQ to Entities не распознает метод - просто оператор delete - PullRequest
0 голосов
/ 05 апреля 2011

У меня есть GridView и при удалении строки я запускаю подпрограмму GridView1_RowDeleting, но получаю сообщение об ошибке «LINQ to Entities не распознает метод метода System.Web.UI.WebControls.TableCell get_Item (Int32)», и этот метод не может быть переведен в выражение магазина. " Код:

Private Sub GridView1_RowDeleting(sender As Object, e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting
    ' The deletion of the individual row is automatically handled by the GridView.
    Dim dbDelete As New pbu_housingEntities
    ' Remove individual from the bed.
    Dim remove_bed = From p In dbDelete.Beds _
                     Where p.occupant = GridView1.Rows(e.RowIndex).Cells(3).Text _
                     Where p.room = GridView1.Rows(e.RowIndex).Cells(6).Text _
                     Where p.building = GridView1.Rows(e.RowIndex).Cells(5).Text _
                     Order By p.id Descending _
                     Select p

    remove_bed.First.occupant = ""
    dbDelete.SaveChanges()

    ' Increase number of open spaces in room.
    Dim update_occupancy = From p In dbDelete.Rooms _
                           Where p.room1 = GridView1.Rows(e.RowIndex).Cells(6).Text
                           Where p.building = GridView1.Rows(e.RowIndex).Cells(5).Text _
                           Select p

    update_occupancy.First.current_occupancy = update_occupancy.First.current_occupancy - 1
    dbDelete.SaveChanges()

End Sub

Конкретная ошибка строки:

remove_bed.First.occupant = ""

Ответы [ 2 ]

4 голосов
/ 05 апреля 2011

Это потому, что запрос Linq транслируется в SQL, и нет способа перевести GridView1.Rows(e.RowIndex).Cells(3).Text в SQL.Вам нужно извлечь значения из GridView, затем использовать их в запросе

Dim occupant As String = GridView1.Rows(e.RowIndex).Cells(3).Text
Dim room As String = GridView1.Rows(e.RowIndex).Cells(6).Text
Dim building As String = GridView1.Rows(e.RowIndex).Cells(5).Text
Dim remove_bed = From p In dbDelete.Beds _
                 Where p.occupant = occupant _
                 Where p.room = room _
                 Where p.building = building _
                 Order By p.id Descending _
                 Select p
1 голос
/ 05 апреля 2011

Вы должны поместить эти значения в переменные перед выполнением запроса, в противном случае Entity Provider попытается вставить весь объект в запрос и получить доступ к его свойствам, когда он пытается преобразовать его в оператор SQL - что не удается, посколькуне является эквивалентом SQL.

...