web-dev-qa-db-ja.com

LINQ to SQLを使用した更新

LINQ to SQLの特定のIDに対してレコードを更新するにはどうすればよいですか?

44
Don Of Qau

LINQはクエリツール(Q =クエリ)です。そのため、(オブジェクト指向の)データコンテキスト(LINQ-to-SQLの場合)を使用する場合を除き、単一の行のみを更新する魔法のLINQ方法はありません。データを更新するには、データを取得し、レコードを更新して、変更を送信する必要があります。

using(var ctx = new FooContext()) {
    var obj = ctx.Bars.Single(x=>x.Id == id);
    obj.SomeProp = 123;
    ctx.SubmitChanges();
}

または、TSQLでも同じことを行うSPを記述し、データコンテキストを通じてSPを公開します。

using(var ctx = new FooContext()) {
    ctx.UpdateBar(id, 123);
}
55
Marc Gravell

より詳細な情報がない場合:

using(var dbContext = new dbDataContext())
{
    var data = dbContext.SomeTable.SingleOrDefault(row => row.id == requiredId);
    if(data != null)
    {
        data.SomeField = newValue;
    }
    dbContext.SubmitChanges();
}
5
spender
 DataClassesDataContext dc = new DataClassesDataContext();

 FamilyDetail fd = dc.FamilyDetails.Single(p => p.UserId == 1);

 fd.FatherName=txtFatherName.Text;
        fd.FatherMobile=txtMobile.Text;
        fd.FatherOccupation=txtFatherOccu.Text;
        fd.MotherName=txtMotherName.Text;
        fd.MotherOccupation=txtMotherOccu.Text;
        fd.Phone=txtPhoneNo.Text;
        fd.Address=txtAddress.Text;
        fd.GuardianName=txtGardianName.Text;

        dc.SubmitChanges();
2
Deepak Goyal
AdventureWorksDataContext db = new AdventureWorksDataContext();
db.Log = Console.Out;

// Get hte first customer record
Customer c = from cust in db.Customers select cust where id = 5;
Console.WriteLine(c.CustomerType);
c.CustomerType = 'I';
db.SubmitChanges(); // Save the changes away
2
Priyank Bolia

1週間前に回避策を見つけました。 「ExecuteCommand」で直接コマンドを使用できます。

MDataContext dc = new MDataContext();
var flag = (from f in dc.Flags
                   where f.Code == Code
                   select f).First();
_refresh = Convert.ToBoolean(flagRefresh.Value);
if (_refresh)
{
    dc.ExecuteCommand("update Flags set value = 0 where code = {0}", Code);
}

ExecuteCommandステートメントでは、更新する特定のレコードの値を使用して、クエリを直接送信できます。

値= 0-> 0は、レコードの新しい値です。

code = {0}->は、フィルター値を送信するフィールドです。

コード->は、フィールドの新しい値です。

このリファレンスがお役に立てば幸いです。

0
user735038