2011-02-22 65 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)。