1

私は2つのクラスを持っています:

class Foo 
{
    string Name
}

class Bar
{
    IList<Foo> Foos;
}

そして、次の式ツリー:

var fooFilters = (Expression<Func<Foo, bool>>)(foo => foo.Name == "baz");

Hibernate では、次のように記述できます。

Session.Query<Bar>().Where(bar => bar.Foos.Any(foo => foo.Name == "baz"));

そして、それは機能します。

しかし、私は書くことができません:

Session.Query<Bar>().Where(bar => bar.Foos.Any(fooFilters)); 

IEnumerable.Anyを予期しないため、コンパイル エラーExpression<TDelegate>です。

達成することは可能ですか?fooFilters 式を書き直す必要がありますか、それとも別の方法がありますか?

私は式ツリーの操作に関する知識がほとんどありません。誰かが私を正しい方向に向けることができますか?

私はフレームワーク 3.5 を使用しています。

4

1 に答える 1

3

これを行うには、 LINQKitからInvoke()andを使用できます。AsExpandable()

これを使用すると、コードは次のようになります。

Session.Query<Bar>().AsExpandable()
       .Where(bar => bar.Foos.Any(foo => fooFilters.Invoke(foo)))
于 2013-02-28T23:30:35.697 に答える