Contains再び
var contains = typeof(IList).GetMethod("Contains"); Expression.Call(****, contains, ***); new [] { "hoge", "hogehoge"}.Contains(カラム名);
前回、上記の用にかけばラムダ式までは辿り着いたのですが、いざ呼び出してみるとエラー
.Contains(System.Object)にはバインドできないとおっしゃっております。引数は対象のカラムの型と合わせる必要がありそうです。
直接ラムダ式かけば.ContainsはIN句に展開されるのは確認している。Containsの引数はカラムの型にマッチするような集合クラスで作成すれば良いはず。
ということで、配列は諦めてリスト方式(Expression.ListInit(Expression.New(typeof(List
ラムダ式的には
new List'1() {Void Add(System.String)("hoge"), Void Add(System.String("hogehoge")}.Contains(カラム名);
の形になりました。始めて見たときはこれがIN句に展開されるとは思いませんでしたが実行したらちゃんとIN句展開されて一件落着