LambdicSqlもSQLを実行して、その結果をオブジェクトにマッピングする機能がありました。Dapperよりも便利なところもあって、匿名クラスにマッピングすることもできてました。ではなぜやめたか。
※Dapperでも匿名クラスにマッピングでる場合もあります。でも、失敗するケースもあり。DateTimeが入っていると大抵失敗する。詳細は追っていません。
//便利なとこもあるけど、この機能は捨てたpublicvoid Test() { //以前は匿名クラスにマッピングすることも可能だった。 var query = Sql.Query<DB>(). Select(db => new { name = db.tbl_staff.name, payment_date = db.tbl_remuneration.payment_date, money = db.tbl_remuneration.money, }). From(db => db.tbl_remuneration). Join(db => db.tbl_staff, db => db.tbl_remuneration.staff_id == db.tbl_staff.id); //読み取り専用なはずの匿名クラスにマッピング var data = query.ToExecutor(new SqlConnection(sqlConnectionString)).Read(); }
特徴を際立たせる
LambdicSqlはラムダからSQLを作成するためのライブラリです。DBにはアクセスしたり、マッピングする機能ははオマケだったのです。でも両方あると「新種のO/Rマッパーね」くらいに捉えられて特徴が伝わりづらいのではないかなーと。
Dapper or LambdicSqlだとDapper使うよね。
折角つくったのだから、広く多くの人に使ってもらいたいですよね。でもこの分野はEntityFrameworkやDapperがすでにあり、そんな信頼性の高いライブラリと張り合てもなかなかねー。総監督からも、「Dapperの利用者が二択せまられたら、Dapper使うよねー」とのご意見をいただきました。それはそうですね。
LambdicSql feat.Dapper
Hey yo yo yeah!オレたちDapperマジリスペクト!
ってわけでフィーチャリングします。実際DapperとLambdicSqlでは注力している部分が違うのです。LambdicSqlでSQLを組み立てて、実行はDapperでやってもらえばよいかなーって思います。ということでサンプルコードです。
publicvoid TestStandard() { var min = 3000; //LambdicSqlのお仕事//SQLを組み立てる var query = Sql<DB>.Create(db => Select(new SelectData() { 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_staff.id == db.tbl_remuneration.staff_id). Where(min < db.tbl_remuneration.money && db.tbl_remuneration.money < 4000)); //テキストとパラメータに落とす var info = query.ToSqlInfo(_connection.GetType()); Debug.Print(info.SqlText); //ここから先はDapperにお任せ//パラメータはDictionary<string, object>で渡す var datas = _connection.Query<SelectData1>(info.SqlText, info.Parameters).ToList(); }
というわけでDapper使いの皆さま、合わせてLambdicSqlのご利用もお願いします!