c# - Linq to Entities 删除而不获取

标签 c# linq linq-to-entities

这段代码可以吗:

using(DbContext db = new DbContext())
{
    IEnumerable<Setting> settings = db.Settings.Where(s=> s.UserId==Uid);
    db.Settings.RemoveRange(settings); 
}

以某种不需要先获取的方式编写?像这样的东西:

using(DbContext db = new DbContext())
{
    db.Settings.Remove(s=> s.UserId==Uid); 
}

最佳答案

当然可以:

如果 UserId 是主键:

using(DbContext db = new DbContext())
{
    Setting settingToRemove = new Setting { UserId = Uid };
    db.Entry(settingToRemove).State = EntityState.Deleted;
    db.SaveChanges();
}

如果 UserId 不是键您必须查询数据库,但您需要的只是根据 UserId 获取主键

using(DbContext db = new DbContext())
{
    List<int> settingIdsToRemove = db.Setting
        .Where(m => m.UserId == Uid)
        .Select(m => m.Id)
        .ToList();

    foreach(int settingId in settingIdsToRemove)
    {
        Setting settingToRemove = new Setting { Id = settingId };
        db.Entry(settingToRemove).State = EntityState.Deleted;
    }

    db.SaveChanges();
}

关于c# - Linq to Entities 删除而不获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38953407/

相关文章:

c# - 找到最具体的匹配项目

c# - LINQ Where() 单管道或双管道/符号

c# - 尝试获取在 Linq2Entities 查询中连接的字符串

c# - volatile 和 readonly 应该互斥吗?

c# - 用 roslyn fix 替换评论(在正确的地方添加琐事)

c# - 将 IEnumerable<T> 转换为 List<SelectListItem> 的 Lambda 扩展方法

c# - Ef Linq 查询超时,但相同的查询在 SSMS 上不到 1 秒

entity-framework - LINQ to Entities - 无法按顺序将 'System.DateTime' 转换为 'System.Object'

c# - 如何删除包含文件的文件夹?

c# - 在写入文件之前压缩 XML