0

我有一个包含许多行的表(房间)。每行代表一个房间,每个房间需要存在两次(秋季一次,春季学期一次)。有时,当人们添加一个房间时,他们只会添加一个学期。我正在研究一个将在学期之间同步房间的过程。

首先,我提取了两个查询,一个获取学期列中包含秋季的所有房间,另一个获取学期列中包含春季的所有房间,如下所示:

        Dim getFallRooms = (From p In dbContext.Rooms _
                            Where p.semester = "Fall" _
                            Select p)
        Dim getSpringRooms = (From p In dbContext.Rooms _
                              Where p.semester = "Spring" _
                              Select p)

每个结果将包含多行,其中包含以下列:id、building、room、occupant 和 term。

我想做的是这样的(伪):

For Each row in getFallRooms
    If row.building and row.room not in getSpringRooms Then
       ' Code to add new row with fall as the semester.
    End If
Next

关于如何将其变成实际可行的代码的任何建议?

4

2 回答 2

1

您可以执行与此链接中正在执行的操作非常相似的操作。

我不确切知道如何在 VB.NET 中执行此操作,但这是我在 C# 中使用 LINQ 扩展方法的方法:

var fallRooms = dbContext.Rooms.Where(room => room.semester.Equals("Fall")).Select(r => r.Name);
var nonSpringRooms = dbContext.Rooms.Where(room => room.semester.Equals("Spring"))
                                    .Select(r => r.Name)
                                    .AsQueryable()
                                    .Except(fallRooms);

之后,您可以For Each在 nonSpringRooms 上执行一个循环来执行您想做的任何事情。

附带说明一下,如果我错了,应该有人纠正我,但我相信上面的代码只会进入数据库一次。因此,您也将获得该好处。

编辑:我意识到,由于它们位于同一张表上,因此记录将具有相同的主键。我随后更改了上面的查询,假设您的名称字段在两条记录中都相同。

于 2013-01-09T20:20:59.287 回答
1
For Each row in getFallRooms
    If (From p in getSpringRooms 
        Where p.building = row.building 
        AndAlso p.room = row.room).Count = 0 Then
       ' Code to add new row with fall as the semester.
    End If
Next
于 2013-01-09T20:23:27.893 回答