Queryクラスによる条件指定
もし、並び順やページングを指定したい場合は、Queryクラスを使用します。QueryクラスはQueryExpressionクラスと同様に、FindメソッドとFindOneメソッドの引数に指定できます。
Queryクラスによるデータの抽出(条件+ソート+ページング)
Query q = new Query();
//条件:タイトルに「あいう」を含む
q.QueryExpression =
Dvd.Attribute("Title").Like("%あいう%");
//並び順:タイトル降順→区分昇順
q.Order = Order.By("Title").Descending().AndBy("Type");
//ページング:最初の行(0行目)から10件取得
q.Page = Page.At(0, 10);
IList list = uow.Find(q);
Orderプロパティに、はソート方法を指定します。まず、Order.Byメソッドで最優先の列名を指定し、AndByメソッドで列を追加していきます。Descendingメソッドを呼び出すと降順に指定できます。 Pageプロパティにはページング方法を指定します。Page.Atメソッドでは、第1引数にOffset(数え始める場所)、第2引数にLimit(取得件数)を指定できます。
データの一括削除、一括更新
このQueryクラスは、データをまとめて削除/更新したい場合にも利用できます。ただし検索の場合とは異なり、EntityTypeプロパティに削除/更新対象のエンティティを設定する必要があります。
一括削除と一括更新
//複数件DELETE
Query del = new Query();
del.EntityType = typeof(Dvd); //エンティティを指定
del.QueryExpression =
Dvd.Attribute("Title") == "猫の惑星";
uow.Remove(del);
//複数件UPDATE
Query upd = new Query();
upd.EntityType = typeof(Dvd); //エンティティを指定
upd.QueryExpression =
Dvd.Attribute("Title").Like("%童話シリーズ%");
IDictionary
削除の場合は、UnitOfWorkのRemoveメソッドを呼び出します。更新の場合はUpdateメソッドを呼び出します。Updateメソッドの第2引数には、アップデートする内容を設定したIDictionaryを指定します。 最後に、SaveChangesメソッドの引数にtrueを指定して呼び出すと、これらの変更が反映され、UnitOfWorkがリセットされます。
Queryクラスのビジュアライザ
LightSpeedでは、Queryクラス用のビジュアライザも用意されています。ビジュアライザのDLL「C:\Program Files\Mindscape\LightSpeed 2.1\Debug VisualizerMindscape.LightSpeed.DebuggerVisualizer.dll」を「(VSのインストールフォルダ)Common7\Packages\Debugger\Visualizers」にコピーすると、Queryクラスが生成するSELECT文をデバッグ中に表示させることができます。