組み合わせの自由度がアップしました。
Sqlビルダーという位置づけになった今、Sql構築の自由度は重要です。
+演算子のサポート
ちょっと前から生成したsql同士のサポートはありました。
var select = Db<DB>.Sql(db => Select(new SelectData1 { Name = db.tbl_staff.name, PaymentDate = db.tbl_remuneration.payment_date, Money = db.tbl_remuneration.money, })); var from = Db<DB>.Sql(db => From(db.tbl_remuneration). Join(db.tbl_staff, db.tbl_remuneration.staff_id == db.tbl_staff.id)); var where = Db<DB>.Sql(db => Where(3000< db.tbl_remuneration.money && db.tbl_remuneration.money < 4000)); var orderby = Db<DB>.Sql(db => OrderBy(Asc(db.tbl_staff.name))); //結合 var sql = select + from + where + orderby;
最近ではこれをLambda中で使うことができるようになりました。
var from = Db<DB>.Sql(db => From(db.tbl_remuneration). Join(db.tbl_staff, db.tbl_remuneration.staff_id == db.tbl_staff.id)); //ラムダの中で結合 var sql = Db<DB>.Sql(db => Select(new SelectData { Type = Case() + When(db.tbl_remuneration.money < 2000).Then("Cheap") + When(db.tbl_remuneration.money < 3000).Then("Middle") + Else("High") + End() }) + from + Where(1000< db.tbl_remuneration.money && db.tbl_remuneration.money < 4000) + OrderBy(Asc(db.tbl_remuneration.money), Desc(db.tbl_staff.name)) );
これにより、より自由にSQLを組み立てることができるようになります。
例えば、Case式のWhen、Thenを条件によって追加とかね。
//checkMiddleが有効の時のみWhen、Thenの句を追加//空のSqlは文字列に変換するときに消える var whenThen = checkMiddle ? Db<DB>.Sql(db => When(db.tbl_remuneration.money < 3000).Then("Middle")) : new Sql<string>(); var sql = Db<DB>.Sql(db => Select(new SelectData { Type = Case<string>() + When(db.tbl_remuneration.money < 2000).Then("Cheap") + checkMiddle + Else("High") + End() }). From(db.tbl_remuneration). Join(db.tbl_staff, db.tbl_remuneration.staff_id == db.tbl_staff.id). Where(1000< db.tbl_remuneration.money && db.tbl_remuneration.money < 4000). OrderBy(Asc(db.tbl_remuneration.money), Desc(db.tbl_staff.name)) );
是非お試しください!