LINQ to SQLの特定のIDに対してレコードを更新するにはどうすればよいですか?
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);
}
より詳細な情報がない場合:
using(var dbContext = new dbDataContext())
{
var data = dbContext.SomeTable.SingleOrDefault(row => row.id == requiredId);
if(data != null)
{
data.SomeField = newValue;
}
dbContext.SubmitChanges();
}
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();
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
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}->は、フィルター値を送信するフィールドです。
コード->は、フィールドの新しい値です。
このリファレンスがお役に立てば幸いです。