2011-02-05 25 views
1

を更新するための最良の方法私は、以下の使用してEFのような構造を持っている:Entity Frameworkの:関連テーブル

アン「イベント」は、多くの「ゲスト」が

のはで、4つのお客様の要素を持っているEvent.Guestsをしましょう持っていますidの1,2,3,4 Event.Guestsを更新して、IDが3,4,5のゲストを(ゲスト5が存在しない場合は作成したい場合)更新します。

イベントから既存のゲストを削除して新しいゲストを追加する最も効率的な方法は何ですか?

これは私が今やっていることです:

 var newGuests = new List<Guest>(); 
    var existingGuests = @event.Guests.ToList(); 

    // GetNewGuestsIds will return the new guests list (3,4,5) 
    foreach (var guestId in GetNewGuestsIds()) 
    { 
     Guest guest = existingGuests.FirstOrDefault(eg => eg.Id == guestId); 

     if (guest == null) 
     { 
      guest = db.Guests.CreateObject(); 
      // fill guest data here 
     } 

     newGuests.Add(guest); 
    } 

    foreach (var existingGuest in existingGuests) 
    { 
     // Remove the existing element from the list to add 
     var removed = newGuests.RemoveAll(g => g.Id == existingGuest.Id); 
     if (removed == 0) // The existing host is not on the list to add, delete it 
     { 
      @event.EventHosts.Remove(existingGuest); 
     } 
    } 

    foreach (var guest in newGuests) 
    { 
     @event.Guests.Add(guest); 
    } 

しかし、私は、これは改善されるかもしれないと思う...私は方法がわかりません。

ありがとうございます!

var existingGuests = @event.Guests.ToList(); 

// GetNewGuestsIds will return the new guests list (3,4,5) 
foreach (var guestId in GetNewGuestsIds()) 
{ 
    if (existingGuests.RemoveAll(g => g.Id == guestId) == 0) 
    { 
     guest = db.Guests.CreateObject(); 
     // fill guest data here 
     @event.Guests.AddObject(guest); 
    } 
} 

existingGuests.ForEach(g => @event.Guests.Remove(g)); 

私は、これは他の誰かの役に立てば幸い:いくつかの後

答えて

0

は、私は多くの良いようだ。この結果となったと思いました。

関連する問題