2011-01-17 6 views
2

2つの式ツリーを作成する方法を実装する必要があります。このような何か:式ツリー - と2つの式を結合して

public Expression<Func<TEntity, bool>> And(Expression<Func<TEntity, bool>> ex1, 
              Expression<Func<TEntity, bool>> ex2) 
{ 
    return Expression.And(ex1, ex2); 
} 

この場合、戻り値の型は、私がExpression<Func<TEntity, bool>>必要なものではありません。
私は何が必要ですか?
ありがとうございます!

答えて

2

非最適解(未テスト):あなたが呼び出すを圧縮しない限り、

public Expression<Func<TEntity, bool>> And(Expression<Func<TEntity, bool>> ex1, 
              Expression<Func<TEntity, bool>> ex2) 
{ 
    var x = Expression.Parameter(typeof(TEntity)); 
    return Expression.Lambda<Func<TEntity,bool>>(
    Expression.And(
     Expression.Invoke(ex1, x), 
     Expression.Invoke(ex2, x)), x); 
} 
1
public Expression<Func<TEntity, bool>> And(Expression<Func<TEntity, bool>> ex1, 
              Expression<Func<TEntity, bool>> ex2) 
{ 
    var parameter = Expression.Parameter(typeof(TEntity)); 
    return Expression.Lambda<Func<TEntity, bool>>( 
       Expression.And(
        Expression.Invoke(ex1, parameter), 
        Expression.Invoke(ex2, parameter)), 
      parameter); 
} 

注これは、Entity Frameworkを使用して動作しません。実装のためのGoogle InvocationExpander。

+0

NHibernateで動作しますか?この機能には時間がかかりますか? – StuffHappens

+0

@StuffHappens:より簡単で移植性の高いオプションは、 'query.Where(ex1).Where(ex2)' :)を使用することです。 – leppie

+0

スケーラブルではありません。 OrとNot(仕様パターン)を実装する必要もあります。 Expressionオペレーションのパフォーマンスが適切かどうかは疑問です。 – StuffHappens

関連する問題