Entity Framework 6中使用Remove批量删除数据时出现编译错误
问题解决:批量删除EF实体编译错误
错误原因
entities.tblPeriods.Remove()方法仅接受单个tblPeriod实体对象,但你通过Where筛选得到的是IQueryable<tblPeriod>类型的实体集合,参数类型不匹配导致编译报错CS1503。
解决方案
方案1:使用RemoveRange批量删除
直接用RemoveRange方法传入筛选后的集合,它支持批量删除多个实体:
public override bool BulkDeletePeriods(DateTime fromDate) { var entities = GetEntities(); var toDelete = entities.tblPeriods .Where(x => x.StartDate >= fromDate); entities.tblPeriods.RemoveRange(toDelete); // SaveChanges返回受影响行数,大于0表示删除成功 return entities.SaveChanges() > 0; }
方案2:EF Core下用ExecuteDelete高效删除(推荐)
如果使用的是EF Core 3.1及以上版本,推荐用ExecuteDelete方法,它不需要先将实体加载到内存,直接生成SQL DELETE语句执行,性能更优:
public override bool BulkDeletePeriods(DateTime fromDate) { var entities = GetEntities(); int deletedCount = entities.tblPeriods .Where(x => x.StartDate >= fromDate) .ExecuteDelete(); return deletedCount > 0; }
内容的提问来源于stack exchange,提问作者John H.
相关产品推荐
相关产品推荐

