2011-07-22 93 views
0

FNH新手问题 -功能NHibernate - 过滤结果集

我有两个对象RR和TT定义如下:

public class RR 
{ 
    Id 
    Name 
    TT_Id //corresponds to TT.Id 
} 

public class TT 
{ 
    Id 
    Name 
    Type 
} 

我想从RR筛选记录下面的SQL按:

SELECT RR.* 
FROM RR 
LEFT OUTER JOIN TT ON RR.TT_Id = TT.Id 
WHERE TT.Type <> 7 

任何人都可以请指导如何添加过滤器标准,以达到上述NH。

谢谢!

回答

3

你为什么TT_Id,而不是TT本身RR? IMO会让很多事情比需要更困难。

是否会参考TT然后

resultlist = session.CreateCriteria<RR>() 
    .CreateCriteria("TT") 
    .Add(Restrictions.Not(Restrictions.Eq("Type", 7))) 
    .List<RR>(); 

否则

var subquery = DetachedCriteria.For<TT>() 
    .Add(Restrictions.Not(Restrictions.Eq("Type", 7))) 
    .SetProjection(Projections.Id()); 

resultlist = session.CreateCriteria<RR>() 
    .Add(Subqueries.In("TT_id", subquery))) 
    .List<RR>(); 

IList<object[]> resultlist = session.CreateSqlQuery("SELECT RR.* FROM RR LEFT OUTER JOIN TT ON R.TT_Id = TT.Id WHERE TT.Type <> 7 ") 
    .List().Cast<object[]>(); 

// hydrate RR yourself here 
+0

FIRO您好,感谢您的答复。那么,我正在尝试DetachedCriteria,因为你有上面的建议,但得到这个错误: – iniki

+0

错误 - 无法从'NHibernate.Criterion.DetachedCriteria'转换为'对象[]'在这一行:criterions.Add(Restrictions.In(“ TT_id“,subQuery)); Herez我的代码片段:IList criterions = new List (); criterions.Add(Restrictions.In(“TT_id”,subQuery)); IMul​​tiCriteria c = session.CreateMultiCriteria();应用策略 iniki

+0

@iniki抱歉复制粘贴错误编辑**限制**到**子查询** – Firo