2010-01-14 1 views
5

내가 단지 두 개의 열이 포함 된 간단한 테이블이 있다고 가정하자 :기존 레코드를 모두 삭제하지 않고도 LINQ-to-SQL을 사용하여 테이블을 업데이트하려면 어떻게해야합니까?

MailingListUser을
- PK ID (int)를
- FK 사용자 ID (INT) 내가 가진

UpdateMailList(IEnumerable<int> userIDs라고하는 방법).

LINQ에서 전달 된 매개 변수에는 있지만 db에는 존재하지 않지만 db에 있지만 더 이상 UserID에없는 사용자 ID를 삭제하고 이미 db와 userID 둘 다에있는 것들만?

사용자에게는 확인란 목록이 표시되며 처음로드 할 때 해당 사용자가 선택한 maillist 용 멤버가 선택되어 있습니다.

사용자는 다양한 사용자를 선택 또는 선택 취소하고 "저장"할 수 있습니다. 이런 일이 발생하면 데이터베이스의 상태를 체크리스트의 상태로 업데이트해야합니다. 단순히 MailingListUser 테이블의 모든 항목을 삭제하는 것보다 더 나은 방법이 있나요

 public void UpdateMailList(IEnumerable<int> userIDs) 
     { 
      using (MainDataContext db = new MainDataContext()) 
      { 
       var existingUsers = (from a in db.MailListUsers 
            select a); 

       db.MailListUsers.DeleteAllOnSubmit(existingUsers); 
       db.SubmitChanges(); 


       var newUsers = (from n in userIDs 
           select new MailListUser 
           { 
            UserID = n 
           }); 

       db.MailListUsers.InsertAllOnSubmit(newUsers); 
       db.SubmitChanges(); 
      } 
     } 
    } 
} 

, 모든 사용자 아이디 값을 다시 삽입 : 여기

내가 지금하고있어 무엇인가? 삭제해야하는 사용자를 조회하려면

답변

4

이런 식으로 뭔가 작업을해야합니다 :

var existingUsers = from u in db.MailListUsers 
        select u; 

var deletedUsers = from u in existingUsers 
        where !userIDs.Contains(u.UserID) 
        select u; 

var newUsers = from n in userIDs 
       let ids = from u in existingUsers 
         select u.UserID 
       where !ids.Contains(n) 
       select new MailListUser { 
        UserID = n 
       }; 

db.MailListUsers.DeleteAllOnSubmit(deletedUsers); 
db.MailListUsers.InsertAllOnSubmit(newUsers); 
db.SubmitChanges(); 
0

는 수행

var에 delUsers의 =를 U에서 userKeys.Contains (u.UserKey가) U를 선택 db.MailListUsers 에;!

db.MailListUsers.DeleteAllOnSubmit (delUsers);

새 레코드를 만드는 가장 좋은 방법은 확실하지 않습니다. 이렇게 할 수는 있지만 가장 효율적인지는 확실하지 않습니다.

var newUserKeys = u from userKeys 여기서 (db.MailListUsers.Where (j => j.UserKey == u.UserKey) .Count() == 0) select u;

100 % 확신 할 수 없습니다. 또는 기존 사용자 키를 모두 선택하고 다음과 같이 상호 참조 할 수 있습니다.

var newUserKeys = userKeys.Where (i!> existingKeys.Contains (i.UserKey));

다시 말해서 성능에 미치는 영향을 모두 모릅니다.

HTH.

관련 문제