【问题标题】:LINQ to Entities does not support the method...System.Object CompareObjectEqualLINQ to Entities 不支持方法...System.Object CompareObjectEqual
【发布时间】:2011-05-31 22:45:47
【问题描述】:

当我执行下面的代码时,我收到错误消息:

LINQ to Entities 无法识别方法 'System.Object CompareObjectEqual(System.Object, System.Object, Boolean)' 方法,并且该方法无法转换为存储表达式。

这似乎发生在 PCstudent 的 For Each row2 行上。

    Protected Sub btnPushSemester_Click(sender As Object, e As EventArgs) Handles btnPushSemester.Click
    Dim dbPC As New Campus6Entities
    Dim dbContext As New pbu_housingEntities
    Dim getOccupants
    Dim thisYear As String
    Dim thisTerm As String
    Using dbContext
        Dim get_Year = From p In dbContext.Configs _
                           Where p.Description = "year" _
                           Select p

        Dim get_Term = From p In dbContext.Configs _
                       Where p.Description = "term" _
                       Select p

        thisYear = get_Year.First.textValue
        thisTerm = get_Term.First.textValue
        getOccupants = From p In dbContext.Residents _
                 Where p.semester = thisTerm _
                 Where p.year = thisYear _
                 Select p

        Using dbPC
            For Each row In getOccupants
                Dim student_info = row
                Dim people_id = student_info.people_code_id
                Dim building_code = student_info.Building1.building_code
                Dim room = student_info.Room1.room1
                Dim PCstudent = From r In dbPC.RESIDENCies _
                                Where r.PEOPLE_ID = people_id _
                                Where r.ACADEMIC_YEAR = thisYear _
                                Where r.ACADEMIC_TERM = thisTerm _
                                Select r

                For Each row2 In PCstudent
                    Dim student_info2 = row2
                    student_info2.DORM_BUILDING = building_code
                    student_info2.DORM_ROOM = room
                    student_info2.RESIDENT_COMMUTER = "R"
                    student_info2.DORM_CAMPUS = "O000000001"
                    dbPC.SaveChanges()
                Next
            Next
        End Using
    End Using

End Sub

【问题讨论】:

    标签: asp.net vb.net entity-framework entity-framework-4 linq-to-entities


    【解决方案1】:

    首先,您以最困难的方式(在代码中逐行更新)而不是对数据库进行单一更新;也就是说,从表面上看,没有什么看起来不正确。您可以检查“dbPC.Residencies”的定义以确保它的定义正确,并且您可能需要在“For Each”之前放置一个“if (PCStudent.Any())”检查,尽管它应该按照书面说明工作.

    【讨论】:

    • 你建议用什么方法来代替?
    • 其实Steve的定义有一个问题:RBAR(逐行)对于Person来说往往是最容易理解的,但对于Database server来说却是最难的方式。相反的是使用集合。 .Net 中的数据集甚至是强类型类,上帝知道还有多少其他表示相关数据组的方法。
    • 那个问题的解决方案,而不是你所问的问题是在列表中工作。如果您使用的是实体框架,那么我确定实体接受列表/IEnumerable 作为源。您只需选择您需要的居住者,根据需要更新他们的个人属性,然后将整个集合传回 EF 以更新数据库。
    • 我不是想说“问题”,对不起,史蒂夫,应该使用“差距”之类的词,你是对的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    相关资源
    最近更新 更多