Linq.DynamicでAny演算子を使用する方法を理解しようとしています。これが私のテストコードです。
var bar = new[] {
new {Bar = "A", Id = 1},
new {Bar = "B", Id = 1},
new {Bar = "C", Id = 2},
new {Bar = "A", Id = 2},
new {Bar = "B", Id = 3},
new {Bar = "C", Id = 3}
};
var foo = new[] {
new {Foo = 1, Id = 1},
new {Foo = 1, Id = 1},
new {Foo = 2, Id = 2},
new {Foo = 2, Id = 2},
new {Foo = 2, Id = 3},
new {Foo = 3, Id = 3}
};
var res = foo.GroupJoin(bar, x => x.Id, y => y.Id, (x, l) => new { F = x.Foo, Bs = l.Select(b => b.Bar).ToArray() }).ToArray();
var normalLinq = res.Where(x => x.Bs.Any(y => y == "A")).ToArray();
var dynamicLinq = res.AsQueryable().Where("Bs.Any(x => x==\"A\")").ToArray(); //won't work
"Bs.Any(x => x==\"A\")"
という構文は、動的linqが入力したラムダ式を認識していないようで、例外がスローされるため、間違っています。どうすれば機能しますか?
私の目標は、このコードを使用して動的検索入力を解析することです。 Linqエキスパートが動的検索を実行する他のより良い方法を持っている場合、提案してください。
このライブラリを使用している場合: http : //www.nuget.org/packages/System.Linq.Dynamic/私が知る限り、ラムダ式は許可されていません。しかし、このライブラリを拡張した人がいます。私は試したことはありませんが、有望に見えます。 http://dynamiclinq.codeplex.com/頑張ってください:)