提问人:John H. 提问时间:11/10/2023 最后编辑:marc_sJohn H. 更新时间:11/10/2023 访问量:43
在 LINQ 中将“Remove”与 Entity Framework 6 一起使用会导致编译错误
Using "Remove" in LINQ with Entity Framework 6 causing compile error
问:
这种方法没有编译,我似乎找不到好的修复方法。
目标是从调用的“周期表”中删除所有大于或等于要传入的变量的行:tblPeriods
StartDate
fromDate
public override bool BulkDeletePeriods(DateTime fromDate)
{
var entities = GetEntities();
var toDelete = entities.tblPeriods
.Where(x => x.StartDate >= fromDate);
entities.tblPeriods.Remove(toDelete);
return Convert.ToBoolean(entities.SaveChanges());
}
这是我得到的编译时错误:
错误 CS1503
参数 1:无法从“System.Linq.IQueryable”转换为“tblPeriod”
答:
0赞
Dave Cousineau
11/10/2023
#1
我不认为那样工作。默认情况下,“批量”操作在 EF 中并不真正起作用,尽管我认为您可以获得具有它们的第三方库。Remove
示例的快速解决方案如下所示:
var toDelete =
entities
.tblPeriods
.Where(x => x.StartDate >= fromDate)
.ToList();
foreach (var item in toDelete)
entities.tblPeriods.Remove(item);
或者用:RemoveRange
var toDelete =
entities
.tblPeriods
.Where(x => x.StartDate >= fromDate)
.ToList();
entities.tblPeriods.RemoveRange(toDelete);
请注意,这仍然不是“批量”操作。它将通过其键单独删除每一行。如前所述,如果您真的想要一个 ,您将需要某种第三方库。(尽管如果我记得的话,批量操作可能很快就会在 EF Core 中推出。RemoveRange
DELETE WHERE
评论
RemoveRange
IQueryable