0

多数の行を含むテーブル (Rooms) があります。各行は部屋を表し、各部屋は 2 回 (秋学期に 1 回、春学期に 1 回) 存在する必要があります。部屋を追加する場合、1 学期だけ追加することがあります。学期ごとに部屋を同期させるプロセスに取り組んでいます。

最初に 2 つのクエリを取得しました。1 つは学期の列に秋があるすべての部屋を取得し、もう 1 つは学期の列に春があるすべての部屋を取得します。次のようにします。

        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、建物、部屋、占有者、および学期の列を持つ複数の行が含まれます。

私がやりたいことは、次のようなものです(疑似):

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 で行う方法は正確にはわかりませんが、LINQ 拡張メソッドを使用して C# で行う方法は次のとおりです。

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 EachSpringRooms 以外でループを実行して、やりたいことを何でも実行できます。

補足として、私が間違っている場合は誰かが私を修正する必要がありますが、上記のコードはデータベースに一度しかアクセスしないと思います。したがって、そのメリットも得られます。

編集:それらは同じテーブルにあるため、レコードの主キーが同じになることに気付きました。その後、両方のレコードで同じ名前フィールドがあると仮定して、上記のクエリを変更しました。

于 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 に答える