流畅的NHibernate - 过滤结果集

时间:2011-07-22 16:14:29

标签: fluent-nhibernate

FNH新手问题 -

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

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

public class TT
{
   Id
   Name
   Type   
}

我想按照以下SQL过滤来自RR的记录:

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

任何人都可以指导我如何在NH中添加过滤条件以实现上述目标。

谢谢!

1 个答案:

答案 0 :(得分:3)

为什么 RR TT_Id TT 本身? 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