数据库中包含1列(varchar)的表:" user1"," user2"," user3"。
内存列表:users = {" user1"," user2"}
有没有办法使用RemoveRange删除数据库中与内存列表项匹配的项?因此,在调用SaveChanges()之后,将从数据库中删除user1和user2。
db.Users.RemoveRange(....);
db.SaveChanges();
由于
答案 0 :(得分:1)
您可以使用EntityFramework.Extensions
项目。
List<User> usersToDelete = ...;
List<int> idsToDelete = usersToDelete.Select(x => x.Id).ToList();
db.Users.Delete(x => idsToDelete .Contains(x.Id));
但是,正如您所看到的,您必须在代码中定义密钥。可以创建和扩展从EF获取密钥......但是它使用System.Linq.Expressions
命名空间很多工作,并且非常难。
答案 1 :(得分:1)
哎呀...完全忘记了实际答案。
你想&#34;附加&#34;上下文中的项目。
List<User> usersToDelete = ...;
foreach(var user in usersToDelete)
{
db.Users.Attach(user);
db.Entry(user).State = EntityState.Deleted;
}
db.SaveChanged();
答案 2 :(得分:0)
使用ORM执行此操作的标准方法是从数据库中获取行(是的,我知道这很浪费),然后转身并将其传递回删除函数。
更好的方法是只进行原始SQL调用(不要忘记参数化)调用存储过程。
var t = users.Select(x => x.ColumnName);
var t1 = db.TableName.Where(x => t.Contains(x.ColumnName)).ToList();
//then call RemoveRange()
db.Ranges.RemoveRange(t1);