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中添加过滤条件以实现上述目标。
谢谢!
答案 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