是否可以转换:
公共IList Get() { return Session.CreateCriteria(typeof(T))。List(); }返回IQueryable?
IList和IQueryable有什么区别?
答案 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));
}
通过这种方式,您可以在方法之外开始构建查询,最后随时执行它。