xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

DeclarativeSql v0.2.2 リリース

ちょうど 2 ヵ月前にリリースした DeclarativeSql v0.2 をマイナー更新し、v0.2.2 をリリースしました。最近 v0.2 系を使ってくださっている会社さんがあるとの連絡を受けまして、内心かなり嬉しく思っています :)

今回はマイナーということで機能改善がメイン。なくてもクリティカルではないけれど、できると嬉しい系の細かなものです。NuGet からダウンロードできますので、ぜひお試しください!

PM> Install-Package DeclarativeSql.Core
PM> Install-Package DeclarativeSql.Dapper

bool 型のプロパティを単項式として扱う

これまで bool 型のプロパティでフィルターしようとした場合、実は x.IsHoge == true のように書く必要がありました。truefalse と比較しなきゃだなんて何ともコチラ都合だったので、比較なしで書けるようにしました。

//--- これまでは以下しか書けなかった
connection.Select<Person>(x => x.HasChildren == true);
connection.Select<Person>(x => x.HasChildren != true);  //--- 「== false」でも OK

//--- v0.2.2 以降では以下も OK
connection.Select<Person>(x =>  x.HasChildren);
connection.Select<Person>(x => !x.HasChildren);

ラムダ式とインデクサの展開に対応

条件式にラムダ式/インデクサを指定していた場合、SQL が生成できず StackOverflowException が発生していました。これらが指定されてもうまく動くように調整しました。コンパイルエラーにならず、実行時になって発覚するあたり相当タチが悪い...。

//--- これまでは変数で受けておかないとダメでした
Func<string> getName = () => "xin9le";
var name = getName();
connection.Select<Person>(x => x.Name == name);

//--- v0.2.2 以降はラムダ式を直接指定可能
Func<string> getName = () => "xin9le";
connection.Select<Person>(x => x.Name == getName());
//--- インデクサも同様に変数で受けておかないとダメでした
var ids = new []{ 1, 2, 3 };
var id = ids[0];
connection.Select<Person>(x => x.Id == id);

//--- v0.2.2 以降はインデクサを直接指定可能
var ids = new []{ 1, 2, 3 };
connection.Select<Person>(x => x.Name == ids[0]);

もし他にも動かないケースがあれば対応したいと思います。