【发布时间】:2013-02-03 18:54:40
【问题描述】:
我想我的 DB 层返回一个 IQueryable 的 DTO 对象。我使用 NHibernate,它支持 Linq。但问题是,当我的数据库层离开时,我必须关闭会话,因此 IQueryable 不再工作。 但我也无法返回列表,因为这样查询将不会在 SQL Server 上执行。
那么我是否有可能返回一个 IQueryable,使用 Nhibernate LINQ 执行表达式并返回一个新的 IQueryable??
可能是这样的:
public IQueryable<TagDTO> Tags
{
get
{
using (var session = factory.OpenSession())
{
return new ExceuteQueryable<TagDTO>(session.Query<TagDTO>());
//return session.Query<TagDTO>();
}
}
}
ExceuteQueryable 应该在哪里使用它的表达式树来执行查询,获取结果列表并返回列表的新 iqueryable?
【问题讨论】:
-
你想达到什么目的?
-
我希望表达式进入我的数据层,并在服务器上执行。但是我希望在枚举 IQueryable 时立即执行而不是首先执行。但我不能从我的数据层返回一个列表,因为那时表达式没有转到服务器。而且我也不能使用来自 Linq 的 IQueryable
,因为在枚举完成之前我无法处理会话! -
要执行的表达式在哪里?属性没有参数来传递表达式。返回IQueryable后,连接丢失,无用
-
是的,我知道属性没有参数。但是使用原始的 IQueryable,它也适用于获取表达式树。我认为 IQuerable 的工作方式有点像回调,返回对象然后使用表达式树?还是我错了。
标签: linq nhibernate iqueryable