LambdicSqlの書き方の質問来たんで、久しぶりに書きます。
あえとす 8/18 ボドゲ会 (@aetos382) | Twitterさん、ありがとうございます!
お題のクエリです。
select foo, bar, fromtablewhere foo = 1and bar = 2unionallselect foo, bar, fromtablewhere foo = 3and bar = 4
LambdicSqlで書いたらこんな感じ
var sql = Db<DB>.Sql(db => Select(new { db.table.foo, db.table.bar }). From(db.table). Where(db.table.foo == 1&& db.table.bar == 2). Union(All()). Select(new { db.table.foo, db.table.bar }). From(db.table). Where(db.table.foo == 3&& db.table.bar == 4). );
LambdicSqlはクエリを分けて書くことができます。
var select1= Db<DB>.Sql(db => Select(new { db.table.foo, db.table.bar }). From(db.table). Where(db.table.foo == 1&& db.table.bar == 2) ); var select2 = Db<DB>.Sql(db => Select(new { db.table.foo, db.table.bar }). From(db.table). Where(db.table.foo == 3&& db.table.bar == 4). ); var union = Db<DB>.Sql(db => Union(All())); //+で演算 var sql 1= select1+ union + select2; //これもOK var sql 2= Db<DB>.Sql(db =>select1 + Union(All()) + select2);
whereとかで便利です。
var select = Db<DB>.Sql(db => Select(new { db.table.foo, db.table.bar }). From(db.table) ); var where1 = Db<DB>.Sql(db => Where(db.table.foo == 1&& db.table.bar == 2). ); var where2 = Db<DB>.Sql(db => Where(db.table.foo == 3&& db.table.bar == 4). ); //状況に応じて使い分けbool is1 = false; var sql = selectFrom + (is1 ? where1 : where2);
whereはさらに便利なのがあります。条件が有効なものだけ使われます。使われる条件がなくなるとwhereは消えます。
bool is1 = true; bool is2 = false; var sql = Db<DB>.Sql(db => Select(new { db.table.foo, db.table.bar }). From(db.table). Where(new Condition(is1, db.table.foo == 1) && new Condition(is2, db.table.bar == 2)) );
慣れると便利なので、是非使ってみてください!
github.com