2011-09-20 35 views
1

我的方法有一個參數,它將決定哪個列執行哪個過濾器,所以爲了使事物具有通用性,我需要能夠執行某個邏輯,在哪個列上執行哪個列。如何將一組'And'過濾器附加到QueryOver查詢?

是否可以將.And子句附加到給定QueryOver <>查詢?

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); 

或者你可能更喜歡類似Detached查詢的東西?

+0

是否有可能突破.And部分,然後將其附加到查詢? – codecompleting

+0

當然,我現在要更新我的答案 – psousa

+0

是的類似的東西,不知道我要求說實話,因爲我不記得它是否是脫離了我正在做的標準或其他事情的查詢。 – codecompleting

相關問題