首页 / Entity Framework / 正文

[Entity Framework].NET/C#应用程序编程开发中如何使用Entity Framework一次性更新满足查询条件的多行数据?

2850 发布于: 2018-06-22 读完约需7分钟

问题描述

在.NET/C#的应用程序编程开发中,假如当前有如下的数据表及示例数据:

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

如果查询条件为 friendids=2,3,4,那么需要设置对应这几行数据的status=true,如何使用Entity Framework来一次性更新满足条件的数据呢?

方案一

如果要求执行效率的话,建议使用context.Database.ExecuteSqlCommand()或者context.Database.ExecuteSqlCommandAsync()方法,直接执行SQL语句来处理,实现如下:

string query = "Update YourTable Set ... Where ...";    
context.Database.ExecuteSqlCommandAsync(query, new SqlParameter("@ColumnY", value1), new SqlParameter("@ColumnZ", value2));

方案二

如果只需要更新一个字段的值,使用Entity Framework的实现方式有如几个方式:

方式一:

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

方式二:

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

     db.SaveChanges();
}

方式三:

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

方案三

如果需要一次性更新的字段不止一个,而是多个字段,又应该如何实现呢?
比如例中,要更新namestatus两个字段。 解决方案如下:

方式一:

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

方式二:

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

方式三:

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

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [Entity Framework].NET/C#应用程序编程开发中如何使用Entity Framework查询某个字段去重(distinct)后的数据?

下一篇: [Entity Framework].NET/C#应用程序编程开发中使用Entity Framework Code First如何配置小数类型的精度范围(Decimal and scale)?

本文永久链接码友网 » [Entity Framework].NET/C#应用程序编程开发中如何使用Entity Framework一次性更新满足查询条件的多行数据?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册