我正在将一些代码从Nhibernate 2.x转换为3.0。之前,我使用LINQ插件来获得LINQ支持。我的理解是,在3.0版本中,它作为一流的功能被推出。所以我的问题是,我曾经有这样的:Nhibernate 3&LINQ
return new List<T>(session.Linq<T>().Where(where));
这对于新语法来说是什么样的?我经历了nhib 3文档和教程,并没有看到任何关于linq的东西,所以我找不到后来模式化的例子。
我正在将一些代码从Nhibernate 2.x转换为3.0。之前,我使用LINQ插件来获得LINQ支持。我的理解是,在3.0版本中,它作为一流的功能被推出。所以我的问题是,我曾经有这样的:Nhibernate 3&LINQ
return new List<T>(session.Linq<T>().Where(where));
这对于新语法来说是什么样的?我经历了nhib 3文档和教程,并没有看到任何关于linq的东西,所以我找不到后来模式化的例子。
在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
以便能够使用它。
没有新的语法。 Linq仍然是linq。旧提供程序中名为Linq的方法在新的提供程序中名为Query。
您可以使用enumerable.ToList()来防止使用单独的sql查询加载列表中的每个对象,而不是使用新的List(enumerable)。
为什么不写'return session.Linq().Where(where).ToList()`而不是? –
2011-02-22 21:13:46
是的,修正了这个问题。旧代码。 – 2011-02-22 22:44:15