2012-03-06 39 views
3

我有:NHibernate的查询<T>与分离标准...

var query = session.Query<MyClass>();  

// Here I need to execute a detached criteria, like that : 
// query.UnderlyingCriteria.Add(SpatialExpression.Within("Geo", extent)); 

var t = query.Select(item => new MyClassView 
             { 
              Name, Year, Code 
             } 

那是一个办法做到这一点与查询?或者也许另一种方式?我需要一个IQueryable的结果......

感谢

回答

2

的LINQ提供程序不使用在幕后的标准,它使用从HQL解析器的AST。如果你真的需要一个IQueryable,那么你可以制定这样的

var ids = session.QueryOver<MyClass>() 
    .UnderlyingCriteria.Add(SpatialExpression.Within("Geo", extent)) 
    .Select(myclass => myclass.Id) 
    .List<int>(); 

var query = session.Query<MyClass>() 
    .Where(x => ids.Contains(x.Id)) 
    .Select(item => new MyClassView 
    { 
     Name, Year, Code 
    }); 

注意查询:它使用2次往返然而

+0

感谢,如果我倒是想回到IList的,只有使用QueryOver,怎么可以返回IList ?我尝试了,但得到和错误:“无法确定新的MyClassView()的成员” – Paul 2012-03-06 15:57:14

+0

投影到DTO与查询的唯一方法是看起来像这样http://stackoverflow.com/a/5972357/671619 – Firo 2012-03-06 16:11:16