LambdicSql - α 0.0.13リリース - IS NULL 対応
IS NULL 対応しました。
www.nuget.org
最初は IS NULL は何かキーワードを用意して特殊対応にしようと思ってました。int値の時とか面倒ですしね。でも、@yone64さんが、「昔にこの問題に対応したことがある」的なことを言っていたので、やっぱりnullの時に IS NULL に自動で変換した方が便利かなーって思って対応しました。
*あれ?最近のDBはNULLキーワードが主流なようですね。NULLキーワードで比較するようにしました。
SQL作成に使う型です。
//スタッフテーブル public class Staff { public int id { get; set; } public string name { get; set; } } //報酬テーブル public class Remuneration { public int id { get; set; } public int staff_id { get; set; } public DateTime payment_date { get; set; } public decimal money { get; set; } } //二つのテーブル定義を持つ public class DB { public Staff tbl_staff { get; set; } public Remuneration tbl_remuneration { get; set; } } //Select句で使う定義 public class SelectData { public string name { get; set; } public DateTime payment_date { get; set; } public decimal money { get; set; } }
null比較すると、IS NULL になります。
値型の場合はNullable<>で比較するという仕様です。
この例ではmoneyをdecimal?のパラメータと比較することで値型でも IS NULL のクエリを生成できています。
public void IsNull() { decimal? val = null; var query = Sql<DB>.Create(db=> Select(new SelectedData() { Name = db.tbl_staff.name, PaymentDate = db.tbl_remuneration.payment_date, Money = db.tbl_remuneration.money, }). From(db.tbl_remuneration). Join(db.tbl_staff, db.tbl_remuneration.staff_id == db.tbl_staff.id). Where(db.tbl_staff.name == null || db.tbl_remuneration.money == val)); //文字列化 Debug.Print(query.ToSqlInfo(typeof(SqlConnection)).SqlText); //Dapperを使っているなら、以下のように実行できます var datas = _connection.Query(query).ToList(); }
SELECT tbl_staff.name AS Name, tbl_remuneration.payment_date AS PaymentDate, tbl_remuneration.money AS Money FROM tbl_remuneration JOIN tbl_staff ON (tbl_remuneration.staff_id) = (tbl_staff.id) WHERE ((tbl_staff.name) = (NULL)) OR ((tbl_remuneration.money) = (NULL))
!= で比較すると IS NOT NULL になります。
public void IsNotNull() { decimal? val = null; var query = Sql<DB>.Create(db=> Select(new SelectedData() { Name = db.tbl_staff.name, PaymentDate = db.tbl_remuneration.payment_date, Money = db.tbl_remuneration.money, }). From(db.tbl_remuneration). Join(db.tbl_staff, db.tbl_remuneration.staff_id == db.tbl_staff.id). Where(db.tbl_staff.name != null || db.tbl_remuneration.money != val)); //文字列化 Debug.Print(query.ToSqlInfo(typeof(SqlConnection)).SqlText); //Dapperを使っているなら、以下のように実行できます var datas = _connection.Query(query).ToList(); }
SELECT tbl_staff.name AS Name, tbl_remuneration.payment_date AS PaymentDate, tbl_remuneration.money AS Money FROM tbl_remuneration JOIN tbl_staff ON (tbl_remuneration.staff_id) = (tbl_staff.id) WHERE ((tbl_staff.name) <> (NULL)) OR ((tbl_remuneration.money) <> (NULL))
履歴
2016/09/02 β版対応