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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用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();
}

更新

根据评论中的要求,显示如何更新多个列可能是有意义的。因此,为了本练习的目的,我们不仅要更新status。我们想更新namestatus匹配的friendidvar 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(); } 。以下是一些语法选项:

选项1

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

选项2

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();
}

选项3

db.SubmitChanges();

更新2

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

db.SaveChanges()

但是对于Entity Framework提交更改,它是:

ToList()
另一答案

不要在接受的答案中使用ToList()方法!

运行SQL分析器,我验证并发现string query = "Update YourTable Set ... Where ..."; context.Database.ExecuteSqlCommandAsync(query, new SqlParameter("@ColumnY", value1), new SqlParameter("@ColumnZ", value2)); 函数从数据库中获取所有记录。这真是糟糕的表现!!

我会通过pure sql命令运行此查询,如下所示:

using (var context = new SomeDBContext())
{
    foreach (var item in model.ShopItems)  // ShopItems is a posted list with values 
    {    
        var feature = context.Shop
                             .Where(h => h.ShopID == 123 && h.Type == item.Type).ToList();

        feature.ForEach(a => a.SortOrder = item.SortOrder);
    }

    context.SaveChanges();
}

这将在一次性操作中进行更新而不选择甚至一行。

另一答案

这就是我做的:

IF:

qazxswpoi

希望帮助某人。

以上是关于如何使用linq to sql一次更新多行?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 LINQ to SQL 创建通用数据访问对象 (DAO) CRUD 方法

如何改进 Linq-To-Sql 代码

Linq-To-Sql ORM 更新一对多

Linq to Sql-我可以构建一个通用的更新操作吗?

Linq to SQL 通过 BLL 问题更新 - 最佳实践

LINQ to SQL / LINQ to Collections 性能