はじめに

基本編にて、ModelLoader.From(Of T)メソッドがある程度理解された方向けのドキュメントです。

事前準備

基本編にて使用したクラスとテーブルをそのまま使用します。

主キー検索、代理キー検索機能

Function SQL
WhereKeyEquals(valueAs Object) keycolumn = value
WhereAlternativeKeyEquals(id As Object) alternativekeycolumn = value
  • AlternativeKey は代理キーのことで、ユニーク制約を指します。なお、代理キーは手動で属性を付けない限りありません。
  • 基礎編で紹介したWhereEqualsメソッドでも等価のコードを記述することは可能ですが、キー検索関数ではプロパティを指定しなくても済むので、短く記述できます。

VB.NET
Imports Kairyu.Extensions.IO
Imports Kairyu.Load
・・・
Dim m As Prefecture = Nothing
DB.Connect(Sub(r) m = r.From(Of Prefecture).WhereKeyEquals(1).ToItem)
  • ORMのコードを記述するときは、拡張メソッドを使用するために「Kairyu.Load」をインポートしておいてください。

今回、ToListメソッドの代わりにToItemメソッドを使用しました。
ToListメソッドとToItemメソッドの違いは以下の通り。
Function Description
ToList As List(Of T) リスト型で返されます。
ToItem As T 単一型で返されます。存在しない場合はNothingが返されます。

ToListメソッドを使用してもよいのですが、主キー検索の場合など戻り値が1つ以下であることが明瞭な場合はToItemメソッドを使用するとよいでしょう。
なお、ToItemメソッドは、ToListメソッドを使用した以下のコードとほぼ等価です。
Imports Kairyu.Extensions.IO
Imports Kairyu.Load
・・・
Dim m As Prefecture = Nothing
DB.Connect(
    Sub(r) 
        m = r.From(Of Prefecture).WhereKeyEquals(1).ToList.FirtstOrDefault
    End Sub)

OR検索機能

OR検索は可能ではありますが、記述が面倒です。
Function SQL
WhereOR(queries() As Query(Of T) (query1 OR query2 OR ... OR queryN)


VB.NET
Imports Kairyu.Extensions.IO
Imports Kairyu.Load
・・・
Dim lst As List(Of Prefecture) = Nothing
DB.Connect(
    Sub(r)
        Dim q1 = r.From(Of Prefecture).WhereEquals(Function(x) x.PrefectureID, 1)
        Dim q2 = r.From(Of Prefecture).WhereGreaterOrEqual(Function(x) x.PrefectureID, 40)
        lst = r.From(Of Prefecture).WhereOR({q1, q2}).ToList
    End Sub)
実行前のクエリ(ToListメソッド実行前の状態)を配列でセットすることで、OR条件式として利用します。
なお、このコードで生成されるSQL文は以下のとおり。

SQL
SELECT 
T0.PrefectureID AS T0_0, T0.PrefectureName AS T0_1, T0.PrefectureHiragana AS T0_2 
FROM 
Prefectures T0 
WHERE 
(T0.PrefectureID = 1) OR (40 <= T0.PrefectureID)

Last edited Mar 12, 2013 at 3:03 PM by mk3008, version 2

Comments

No comments yet.