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