※この投稿はMicrosoft Visual Studio 2008 Beta2で動作を確認しています。
前の記事でまとめたデータを特定する方法をもとに、特定したデータをテーブルから削除してみます。
データの削除は、テーブル(dtc.People)から特定のデータのインスタンスを削除(Rremove)することによって行われます。
using System;
using System.Linq;
namespace LINQ6
{
class Program
{
static void Main(string[] args)
{
LINQTESTDataContext dtc = new LINQTESTDataContext();
dtc.Log = Console.Out;
People deletePerson = dtc.People.First(p => p.Name == "オノ シュウジ");
dtc.People.Remove(deletePerson);
dtc.SubmitChanges();
Console.Read();
}
}
}
この結果は次のようになります。
実際にデータが削除されていることを確認してみましょう。
削除時のSQL文ではデータのすべての値を確認して一致するデータを消すようになっています。
これは他のユーザによって該当するデータが修正されている場合にそのデータを削除してしまわないための、要するに同時実効制御を考えたSQL文が生成されているということです。
同時実行制御のためにすべてのデータの値を使うのはどうもスマートではない、と考える人のためにデータのタイムスタンプ等を利用する方法もあるのですが、その点についてはデータの更新のところで述べることにします。
ちなみに、プログラムを次のように記述してもまったく同じ動作をします。
using System;
using System.Linq;
namespace LINQ6
{
class Program
{
static void Main(string[] args)
{
LINQTESTDataContext dtc = new LINQTESTDataContext();
dtc.Log = Console.Out;
dtc.People.Remove(dtc.People.First(p => p.Name == "オノ シュウジ"));
dtc.SubmitChanges();
Console.Read();
}
}
}
できるだけ短いプログラムを書きたい人がいれば、一応こういう書き方もできますよ、ということで。