RemoveAll不会删除记录

时间:2017-08-08 10:25:58

标签: c# entity-framework linq

我想在点击某个按钮时根据某些条件删除一些记录。 仅删除这些记录后,我将插入新数据。

 dbContext.AdviserFeeDetailReports.AsEnumerable().ToList()
     .RemoveAll(x => x.PracticeId == superFund.CompanyID 
             && x.SuperFundId == superFund.SuperFundId);

 dbContext.SaveChanges();

我想知道为什么它不会从表中删除相关记录。没有异常,上面两行被执行。但是记录仍然存在于DbContext和数据库中。

1 个答案:

答案 0 :(得分:15)

您要从列表中删除,而不是从AdviserFreeDetailReports删除。此外,调用AsEnumerable()ToList()将从数据库中提取整个表并将数据放在单独的列表中,这是您想要的吗?

我相信你的代码会更有效率:

var toRemove = dbContext.AdviserFeeDetailReports
    .Where(x => 
        x.PracticeId == superFund.CompanyID && 
        x.SuperFundId == superFund.SuperFundId);

dbContext.AdviserFreeDetailReports.RemoveRange(toRemove);

dbContext.SaveChanges();

此实现仅提取您计划删除的对象,DbContext开始跟踪它们。对RemoveRange的调用将标记每个要删除的对象。最后,SaveChanges将发出DELETE语句,最终将从数据库表中删除所有选定的对象。