将此方法从IList转换为IQueryable

时间:2009-12-03 15:30:12

标签: nhibernate collections

是否可以转换:

公共IList Get()         {             return Session.CreateCriteria(typeof(T))。List();         }

返回IQueryable?

IList和IQueryable有什么区别?

2 个答案:

答案 0 :(得分:4)

考虑SQL和Linq时最重要的一个方面是返回IList意味着查询已被执行。返回IQueryable会保持打开稍后推迟执行sql的选项(因此您可以在此方法之外构建查询)。

然而,这只是在使用Linq到NHibernate提供程序时NHibernate的情况。对于SQL语句,Criteria API不是Linqified。因此,在这个实例中,返回IList或IQueryable没有显着差异。

答案 1 :(得分:3)

可能的是返回这样的IEnumerable:

public IEnumerable<T> Get() 
{ 
    return Session.CreateCriteria(typeof(T)).Future<T>(); 
}

通过这种方式,您可以像使用Linq to SQL一样执行延迟执行。

有关Future方法的更多信息,请参阅:

http://ayende.com/Blog/archive/2009/04/27/nhibernate-futures.aspx

您还可以通过返回ICriteria接口而不是IList来模拟IQueryable:

public ICriteria<T> Get() 
{ 
    return Session.CreateCriteria(typeof(T)); 
}

通过这种方式,您可以在方法之外开始构建查询,最后随时执行它。