【ハウツー】
前編では、LightSpeedを使ってモデルを作成する方法を、中編では、エンティティを操作する基本的な方法を紹介しました。後編にあたる本編では、クエリの書き方とエンティティに振る舞いを追加する方法について紹介します。
前回、データを全件取得するFindメソッドと、キー値でデータを1件取得するFindOneメソッドを紹介しました。 今回は、条件を指定してデータを抽出する方法について紹介します。まず、コード例を見てみましょう。ここではFindOneメソッドでDvdのデータを1件取り出しています。
QueryExpressionの使用例
private void btnQuery_Click(object sender, EventArgs e)
{
using (LsUnitOfWork uow = _context.CreateUnitOfWork())
{
//DVDのタイトルが「あいう」
QueryExpression q =
Dvd.Attribute("Title") == "あいう";
Dvd d = uow.FindOne(q);
}
}
QueryExpressionは、エンティティの抽出条件を格納できるクラスです。ここでは「Dvd.Attribute("Title") == "あいう"」と指定して、DVDのタイトルが"あいう"のデータを取得しています。QueryExpressionは「エンティティのAttributeメソッド」+「演算子(またはメソッド)」+「比較する値(文字列、数値、日付、真偽値等)」の組み合わせで構成されます。
このQueryExpressionクラスをFindOneメソッドの引数に指定すると、その条件でデータを抽出できます。ただし、FindOneメソッドで複数件のデータが取得されるとエラーが発生しますので注意してください。
QueryExpressionクラスでは、複数の条件を指定することができます。次はFindメソッドを使用してDvdデータを取り出してみます。
QueryExpressionに複数条件を指定
//DVDのタイトルが「あいう」でなく、かつ、区分が1か2
QueryExpression qe =
Dvd.Attribute(Dvd.TitleField) != "あいう"
&& Dvd.Attribute(Dvd.TypeField).In(1, 2);
IList list = uow.Find(qe);
ここでは、タイトルと区分を条件に指定しています。InメソッドはSQLのIN句に展開されます。Attributeメソッドの引数で文字列をベタに書きたくない場合は、このようにエンティティの定数を使用することもできます。
複雑な条件を組み立てる例も見ておきましょう。
QueryExpressionの組み合わせ
//条件1:タイトルに「あいう」を含む
QueryExpression qe1 =
Dvd.Attribute("Title").Like("%あいう%");
//条件2:URLが「jp」で終わる
QueryExpression qe2 =
Dvd.Attribute("InfoUrl").Like("%jp");
//条件3:区分が1以上
QueryExpression qe3 =
Dvd.Attribute("Type") >= 1;
//条件1でなく かつ 条件2または条件3
QueryExpression qeAll = !qe1 && (qe2 || qe3);
IList list = uow.Find(qeAll);
この例では複数のQueryExpression変数を組み合わせて、1つのQueryExpression(qeAll)を作成しています。この機能を使うことで、検索条件が複雑であっても、上手くクエリを組み立てることができます。
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
【連載】鉄道トリビア 第137回 山手線と京浜東北線から●●●が消えた!? [08:00 2/11] ライフ |
|
JRグループ、「周遊きっぷ」を見直し - 19の周遊ゾーンが3/31で販売終了に [07:30 2/11] ライフ |
|
「青春18きっぷ」春季用は2/20発売 - 夏季用・冬季用の発売は現時点で未定 [07:30 2/11] ライフ |
|
【ハウツー】炊飯器でつくるチャーシューが簡単すぎ、しかもおいしい! [07:00 2/11] ライフ |
|
【連載】出社前に。日常生活ですぐに使える! 英語クイズ 第118回 「どうぞお話しください、あなたが話す番です」ってなんて言う? [07:00 2/11] ライフ |