RemoveAll不会删除记录

Pra*_*ika -2 c# linq entity-framework

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

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

 dbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

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

Zor*_*vat 15

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

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

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

dbContext.AdviserFreeDetailReports.RemoveRange(toRemove);

dbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

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