2013-01-09 29 views
0

我有一個包含多個行的表(Rooms)。每行代表一個房間,每個房間需要存在兩次(一次是秋季,一次是春季學期)。有時當人們添加一個房間時,他們只添加一個學期。我正在研究一個可以在學期間同步房間的流程。比較兩個查詢和同步結果

首先我拉着兩個查詢,一個得到所有的客房,在秋季學期其列,一個在他們的學期柱得到所有的客房彈簧,像這樣:

 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 

我如何能製作成實際的,可行的代碼這有什麼建議?

回答

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 
+0

謝謝!這很好! – davemackey

1

你可以做一些非常相似的事情at this link

我不確知如何做到這一點在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上循環執行任何你想做的事情。

在附註上,如果我錯了,有人應該糾正我,但我相信上面的代碼只會去數據庫一次。因此,你也會得到這個好處。

編輯:我意識到,因爲他們會在同一張表上,記錄將具有相同的主鍵。我後來改變了上面的查詢,假設你有一個在兩個記錄中都是相同的名稱字段。