ちょうど 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
のように書く必要がありました。true
や false
と比較しなきゃだなんて何ともコチラ都合だったので、比較なしで書けるようにしました。
//--- これまでは以下しか書けなかった 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]);
もし他にも動かないケースがあれば対応したいと思います。