C# 如何使用LINQ to SQL更新表,而不必删除所有现有记录?

C# 如何使用LINQ to SQL更新表,而不必删除所有现有记录?,c#,.net,linq,linq-to-sql,C#,.net,Linq,Linq To Sql,假设我有一个只包含两列的简单表: MailingListUser -PKID(int) -FK用户ID(int) 我有一个名为updateEmailList(IEnumerableuserIDs)的方法 在LINQ中,如何插入传入参数中存在但数据库中不存在的用户标识,删除数据库中但不再存在的用户标识,并保留数据库和用户标识中已经存在的用户标识 将向用户显示一个复选框列表,当用户首次加载时,将选中邮件列表中的现有成员 然后,用户可以选中和取消选中各种用户并点击“保存”。一旦发生这种情况,我需要用清

假设我有一个只包含两列的简单表:

MailingListUser
-PKID(int)
-FK用户ID(int)

我有一个名为
updateEmailList(IEnumerable
userIDs)
的方法

在LINQ中,如何插入传入参数中存在但数据库中不存在的用户标识,删除数据库中但不再存在的用户标识,并保留数据库和用户标识中已经存在的用户标识

将向用户显示一个复选框列表,当用户首次加载时,将选中邮件列表中的现有成员

然后,用户可以选中和取消选中各种用户并点击“保存”。一旦发生这种情况,我需要用清单的状态更新数据库的状态

以下是我现在正在做的:

        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();
            }
        }
    }
}
public void updateEmailList(IEnumerable用户ID)
{
使用(MainDataContext db=new MainDataContext())
{
var existingUsers=(来自db.MailListUsers中的
选择a);
db.MailListUsers.DeleteAllOnSubmit(现有用户);
db.SubmitChanges();
var newUsers=(从userid中的n开始)
选择新建邮件列表用户
{
UserID=n
});
db.MailListUsers.InsertAllOnSubmit(新用户);
db.SubmitChanges();
}
}
}
}

有没有比简单地删除MailingListUser表中的所有条目并重新插入所有UserID值更好的方法?

要查询需要删除的用户,请执行以下操作:

var delUsers=来自db.MailListUsers中的u 哪里包含(u.UserKey) 选择u

db.MailListUsers.deleteAllonsSubmit(delUsers)

我不确定录制新唱片的最佳方式。你可以这样做,但我不确定这是最有效的:

var newUserKeys=来自用户密钥中的u 其中(db.MailListUsers.where(j=>j.UserKey==u.UserKey).Count()==0) 选择u

我不是100%肯定这会奏效;或者,您可以选择所有现有的用户密钥,然后对照以下内容进行交叉引用:

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

同样,我不知道所有的性能影响


HTH.

类似的方法应该可以:

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();