c# - 如何使用 linq to sql 一次更新多行?

标签 c# sql entity-framework linq linq-to-sql

表格:

id     userid  friendid   name    status
1      1        2         venkat  false
2      1        3         sai     true
3      1        4         arun    false
4      1        5         arjun   false

如果用户发送userid=1,friendids=2,4,5 status=true

我将如何编写查询来更新以上内容?所有 friendids 状态为真。 [一次 2、3、4]?

最佳答案

要更新一列,这里有一些语法选项:

选项 1

var ls=new int[]{2,3,4};
using (var db=new SomeDatabaseContext())
{
    var some= db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList();
    some.ForEach(a=>a.status=true);
    db.SubmitChanges();
}

选项 2

using (var db=new SomeDatabaseContext())
{
     db.SomeTable
       .Where(x=>ls.Contains(x.friendid))
       .ToList()
       .ForEach(a=>a.status=true);

     db.SubmitChanges();
}

选项 3

using (var db=new SomeDatabaseContext())
{
    foreach (var some in db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList())
    {
        some.status=true;
    }
    db.SubmitChanges();
}

更新

按照评论中的要求,展示如何更新多列可能是有意义的。因此,为了本练习的目的,我们假设我们不仅要更新 ones 处的 status。我们想更新匹配 friendidnamestatus。以下是一些语法选项:

选项 1

var ls=new int[]{2,3,4};
var name="Foo";
using (var db=new SomeDatabaseContext())
{
    var some= db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList();
    some.ForEach(a=>
                    {
                        a.status=true;
                        a.name=name;
                    }
                );
    db.SubmitChanges();
}

选项 2

using (var db=new SomeDatabaseContext())
{
    db.SomeTable
        .Where(x=>ls.Contains(x.friendid))
        .ToList()
        .ForEach(a=>
                    {
                        a.status=true;
                        a.name=name;
                    }
                );
    db.SubmitChanges();
}

选项 3

using (var db=new SomeDatabaseContext())
{
    foreach (var some in db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList())
    {
        some.status=true;
        some.name=name;
    }
    db.SubmitChanges();
}

更新 2

在答案中我使用的是 LINQ to SQL,在那种情况下提交到数据库的用法是:

db.SubmitChanges();

但是 Entity Framework 要提交的更改是:

db.SaveChanges()

关于c# - 如何使用 linq to sql 一次更新多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10314552/

相关文章:

MySQL Connector/J v5.x 升级 : query now returning byte[] instead of String

entity-framework - Entity Framework - 自定义异常的 DbUpdateException

c# - 如何在 Entity Framework 中使用返回多个记录集的存储过程

entity-framework - 如果我对已删除的实体调用 EF Reload 会怎样?

c# - 为什么即使设置了 RecordSelectionFormula, Crystal 报表也会获取所有记录?

c# - 在不同选项卡上按名称 IE8 获取元素(Javascript)

c# - 订阅 Func 事件后不会调用协程方法

c# - 激活器.CreateInstance()

php - mysql 查询返回对象,但我需要字符串

mysql - SQL Management Studio - 数据库图表不显示创建的每个表