Quantcast
Channel: ささいなことですが。
Viewing all articles
Browse latest Browse all 104

LambdicSql - 続 String interpolation 対応しました。

$
0
0

neueさんからご意見いただいたので、改善しました。

Expressionで受ける必要ないのでは?

確かに。
シンプルなものは受ける必要がないですね・・・。
書き味悪いし、Expressionは軽い処理ではないので必要ないなら使わない方がいい。
なので、FormattableString で受けるバージョンを追加しました。

publicpartialclass Db
{
    publicstatic Sql InterpolateSql(FormattableString formattableString);
    publicstatic Sql<TResult> InterpolateSql<TResult>(FormattableString formattableString);
}

シンプルに使いたい場合はこっちの方がいいですね。

staticvoid Sample0(IDbConnection cnn)
{
    var city = "London";
    var contactTitle = "Sales Representative";

    var sql = Db.InterpolateSql<Customers>(
$@"SELECT *FROM CustomersWHERE City = {city}AND ContactTitle = {contactTitle}"
       );

    //実行時にコンソールに出力する設定
    DapperAdapter.Log = x => Console.WriteLine(x);

    //Dapperで実行
    var datas = cnn.Query(sql).ToList();
}

f:id:ishikawa-tatsuya:20170716071728p:plain

Expression版は必要ないか?

とは言え、これはこれで便利なところもあるので残します。
式を入れれたり

var sql = Db<DB>.InterpolateSql<Customers>(db =>
$@"SELECT *FROM CustomersWHERE {(db.Customers.City == city && db.Customers.ContactTitle == contactTitle)}"
   );

f:id:ishikawa-tatsuya:20170716073611p:plain
LambdicSqlのオブジェクトを入れたりできます。

var sub = Db<DB>.Sql(db =>
    Select(Sum(db.tbl_remuneration.money)).
    From(db.tbl_remuneration)
    );
var sql = Db.InterpolateSql<Customers>(() =>$@"SELECT Total = ({sub})");

上手く改行できなくてちょっと残念。
f:id:ishikawa-tatsuya:20170716073020p:plain


Viewing all articles
Browse latest Browse all 104

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>