我有以下代码:
List<Item> csItems = (from i in context.Items
where i.CSItem == true
select i).ToList<Item>();
csItems.ForEach(i => i.Active = false);
context.SaveChanges();
看起来这样效率非常低,因为我必须首先读取整个表,然后更新表。有没有更好的方法来做到这一点,我只是在没有阅读所有内容的情况下进行更新?
答案 0 :(得分:2)
Linq2EF没有内置的批量更新,但您可以使用Alex James,articles自行完成,实际上您应该自己实施。简单的方法是使用存储过程。但是如果你想自己拥有它,你可以阅读所有4篇文章系列,它们很容易阅读。
答案 1 :(得分:1)
无需构建项目的List<T>
。我个人只会枚举结果并设置值:
IQueryable<Item> csItems = (from i in context.Items
where i.CSItem == true
select i);
foreach(var item in csItems)
item.Active = false;
context.SaveChanges();
请注意,Entity Framework没有内置批量更新功能,因此执行更高效的操作需要some other technique。