2011-07-12 85 views
21

我必須寫流利的NHibernate的查詢爲功能NHibernate Where子句

Select * from Users where UserName = 'Abcd' AND Password = '123456'

如何創建上面的查詢與session.CreateCriteria

回答

46

流利NHibernate的是一個替代的映射框架,默認HBM文件( Hibernate映射)

的NHibernate本身提供了不同的查詢API的喜歡

  • HQL - Hibernate的查詢語言
  • 標準
  • 查詢 - (LINQ等效)
  • QueryOver - (強類型的標準)
  • SQL

對於標準查詢將沿東西一行:

var users = session.CreateCriteria<Users>() 
        .Add(Restrictions.Eq("UserName", "Abcd")) 
        .Add(Restrictions.Eq("Password", "123456")) 
        .List<Users>(); 

查詢:

var users = from u in session.Query<Users>() 
      where u.UserName == "Abcd" 
      && u.Password == "123456" 
      select u; 

var users = session.Query<Users>() 
        .Where(x => x.UserName == "Abcd" && u.Password == "123456"); 

QueryOver:

var users = session.QueryOver<Users>() 
        .Where(x => x.UserName == "Abcd") 
        .And(u.Password == "123456") 
        .List(); 
+0

感謝偉大的答覆。我可以在上述查詢中返回一個用戶類型嗎? – Saad

+1

@Saad - 單個用戶?而不是一個集合?當然。您可以查看Query/QueryOver上的'SingleOrDefault()',而不是'List()'。我不確定您在Criteria上調用哪種方法來執行單個結果。沒有Visual Studio的方便。 – Phill

+0

感謝SingleOrDefault()爲我工作。 – Saad

0

查詢過

var users = session.QueryOver<Users>() 
        .Where(x => x.UserName == "Abcd" && x.Password == "123456") 
        .List();