2014-02-19 53 views
2

所以在SQL我可以寫這樣的查詢:NHibernate QueryOver主觀在哪裏?

SELECT 
    A, 
    B, 
    C 
FROM 
    myTABLE 
WHERE 
    (@X is NULL OR A = @X) AND 
    (@Y is NULL OR B = @Y) AND 
    (@Z is NULL OR C = @Z) 

,以便如果其中任何指定創建如果沒有指定過濾參數返回所有條目的單個查詢,或子集。但是,我將如何使用Nhibernate的QueryOver去做這件事?我甚至不完全確定如何使用QueryOvery來執行任何操作...

+0

請首先閱讀:http://nhforge.org/doc/nh/en/index.html#queryqueryover-simpleexpressions *(16.2。簡單表達式)*。有所有的答案。如果還有問題,請說明迄今爲止所做的工作......並且您將在此處獲得幫助,我確信;) –

+0

感謝您的鏈接。所以基本上看來,我不能根據參數(如快捷鍵)進行過濾,只能看到列。所以我需要使用單獨的語句來執行此操作,如下所示: 'code' var qry = session.QueryOver (); (!String.IsNullOrEmpty(A)){qry.Where(x => x.a == A);如果(!String.IsNullOrEmpty(B)){qry.Where(x => x.b == B);} }(!String.IsNullOrEmpty(C)){qry.Where(x => x.c == C);} if(!String.IsNullOrEmpty } 列表 fileList = qry.List ().ToList(); – Xorcist

+0

'var qry = session.QueryOver (); (!String.IsNullOrEmpty(A)){qry.Where(x => x.a == A);如果(!String.IsNullOrEmpty(B)){qry.Where(x => x.b == B);} }(!String.IsNullOrEmpty(C)){qry.Where(x => x.c == C);} if(!String.IsNullOrEmpty } List data = qry.List ().ToList();' – Xorcist

回答

1

爲了主觀地查詢(基於參數),接受的方法是將碎片中的where子句構建爲:

var qry = session.QueryOver<obj>(); 
if (!String.IsNullOrEmpty(A)) { qry.Where(x => x.a == A); } 
if (!String.IsNullOrEmpty(B)) { qry.Where(x => x.b == B); } 
if (!String.IsNullOrEmpty(C)) { qry.Where(x => x.c == C); } 
List<obj> data = qry.List<obj>().ToList(); 

所以最後的結果是爲一組給定的參數,而在原崗位規定的通用SQL查詢運行的精確查詢。