Bom*_*fet 5 .net c# linq linq-to-sql
假设我有一个只包含两列的简单表:
MailingListUser
- PK ID(int)
- FK UserID(int)
我有一个叫做的方法. UpdateMailList(IEnumerable<int> userIDs)
在LINQ中,如何为传入的参数中存在但在db中不存在的userID进行插入,删除db中但不再存在于UserID中的那些,并保留已经存在的那些仅在db和userID中?
向用户显示一个复选框列表,当它第一次加载时,它会为已选中的maillist选择现有成员.
然后,用户可以检查并取消选中各种用户并点击"保存".一旦发生这种情况,我需要使用清单的状态更新数据库的状态.
这是我现在正在做的事情:
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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有比简单地删除MailingListUser表中的所有条目并重新插入所有userIDs值更好的方法?
像这样的东西应该有效:
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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1078 次 |
| 最近记录: |