103

テーブル:

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ステータスが true です。[一度に 2,3,4]?

4

3 に答える 3

254

ここで 1 つの列を更新するには、いくつかの構文オプションがあります。

オプション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();
}

アップデート

コメントで要求されているように、複数の列を更新する方法を示すことは理にかなっています。ですから、この演習の目的のために、単に at のものを更新するだけではないとしましょうstatus。更新したい とnameが一致するstatus場所。friendidそのための構文オプションを次に示します。

オプション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()
于 2012-04-25T11:27:25.390 に答える
4

これは私がしたことです:

EF:

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

希望は誰かを助けます。

注: 5年後、コメントで述べたように、内部のデータを取得するためにDB呼び出しを行っているため、適切なオプションではありませんforeach。同じことをしていない場合は、使用しても問題ありません。

于 2016-07-30T18:37:00.110 に答える