2011-09-20 8 views
1

私のメソッドには、どこのフィルタを実行するかを決定するパラメータがあります。一般的なものにするために、どこで実行するかについていくつかのロジックを実行できる必要があります。QueryOverクエリに 'And'フィルタのセットを添付するにはどうすればいいですか?

与えられたQueryOver <>クエリに.And節を付けることは可能ですか?

public List<..> GetABC(SomeType type) 
{ 
    NHibernateHelper.Session.QueryOver<Blah>() 
    .Where(x => x.name = "") 
    .And(x => x.a) // if type == SomeType.A then x.a, otherwise x.b (SomeType.B) 
} 

どうすればいいですか?

私は基準を作成する際に条件を作成し、それをクエリに添付することができます。

答えて

0

私は質問を完全に理解していますが、これは何か?

public List<..> GetABC(SomeType type) 
{ 
    NHibernateHelper.Session.QueryOver<Blah>() 
    .Where(x => x.name = "") 
    .And(x => typeof(type) == SomeType.A ? x.a : x.b) 
} 
2

確かに。

var query = NHibernateHelper.Session.QueryOver<Blah>() 
        .Where(x => x.name = ""); 

if(type == SomeType.A) 
{ 
    query = query.And(x => x.a == ...); 
} 
else 
{ 
    query = query.And(x => x.b == ...); 
} 

クエリはのみ「の.List()」

を更新した後に実行されます:あなたは、この(コメントで)のようなものを参照のうえしている場合、私は知りません

var query = NHibernateHelper.Session.QueryOver<Blah>() 
        .Where(x => x.name = ""); 


Expression<Func<Blah, bool>> typePredicate = null; 


if(type == SomeType.A) 
{ 
    typePredicate = x => x.a == ...; 
} 
else 
{ 
    typePredicate = x => x.b == ...; 
} 


query = query.Where(typePredicate); 

または、おそらく、分離クエリのようなものにもっと興味がありますか?

+0

.And部分を分解して、それをクエリに添付することは可能ですか? – codecompleting

+0

確かに、今私の答えを更新するつもりです – psousa

+0

はい、それは私が基準や何か他のものでやっていた分離されたクエリだったかどうか思い出していないので正直であるように頼んでいました。 – codecompleting

関連する問題