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 val = 
    new Dictionary();
val.Add("Type", 2); //区分を子供向けに設定
uow.Update(upd, val);

//反映
uow.SaveChanges(true);

削除の場合は、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文をデバッグ中に表示させることができます。