2011-02-22 61 views
17

我正在將一些代碼從Nhibernate 2.x轉換爲3.0。之前,我使用LINQ插件來獲得LINQ支持。我的理解是,在3.0版本中,它作爲一流的功能被推出。所以我的問題是,我曾經有這樣的:Nhibernate 3&LINQ

return new List<T>(session.Linq<T>().Where(where)); 

這對於新語法來說是什麼樣的?我經歷了nhib 3文檔和教程,並沒有看到任何關於linq的東西,所以我找不到後來模式化的例子。

+1

爲什麼不寫'return session.Linq ().Where(where).ToList()`而不是? – 2011-02-22 21:13:46

+0

是的,修正了這個問題。舊代碼。 – 2011-02-22 22:44:15

回答

33

在NHibernate的3使用LINQ你這樣做:

from u in session.Query<User>() 
where u.Username == username 
select u 

或者

session.Query<User>().Where(u => u.Username == username) 

不知道這是你在找什麼。

編輯:Query<T>是一種擴展方法。不要忘記添加using NHibernate.Linq以便能夠使用它。

3

沒有新的語法。 Linq仍然是linq。舊提供程序中名爲Linq的方法在新的提供程序中名爲Query。

您可以使用enumerable.ToList()來防止使用單獨的sql查詢加載列表中的每個對象,而不是使用新的List(enumerable)。