1

是否可以將where子句動態添加到NHibernate查詢中?C#NHibernate動態添加Where子句(jqgrid)

我有我需要的一些子句的集合循環並添加Where子句(如果需要) - 即,如果用戶輸入了多個搜索條件。

我可以寫單查詢,沒問題,像這樣的:得到所有以「A」開頭的名稱:

IEnumerable<Customer> customers = nHibernateSession.Query<Customer>().Where(x => x.Name.StartsWith("a")).ToList(); 

,但我不知道該怎麼那麼另一個where子句添加到這個 有效,我需要東西是這樣的:

foreach (clauses in SelectionClauses) 
{ 
    //add a .Where(Clause) to The Session.Query 
} 

我懷疑nHibernateSession.Query不能用這樣的方式...... 有誰知道如何做到這一點?

回答

1

你可以做這樣的事情與LINQ提供程序(session.Query)做到這一點:

var query = session.Query<MyClass>(); 

foreach(var clause in clauses) 
    query = query.Where(clause.BuildExpression()); 

凡BuildExpression返回表達式>例如

但是,如果你正在使用的字符串這可以讓痛苦名稱爲您的屬性,並且使用session.QueryOver或session.CreateCriteria可以更容易地實現您的結果,它們都支持通過名稱而不是通過表達式查詢屬性。

+0

Thanks @Martin!我是nHibernate的新手 - 和Linq。我已經使用上面使用的Query解決了它,並使用switch語句來確定我使用的表達式。 –