2009-11-27 93 views
0

在我的项目中,Lines可以分组,Group的类型可以是Crossing(1)或Parallel(2)。我需要找到所有至少有一组指定类型的行(在本例中为1)。给定行的Id可以在组的列LineALineB上。这里是我到目前为止:用至少一个子对象查询父对象的NHibernate标准?

Criteria crit = session.CreateCriteria(typeof(Line), "ln"); 

DetachedCriteria count = DetachedCriteria.For<Group>() 
.SetProjection(Projections.CountDistinct("Id")) 
.Add(Expression.Or(
    Expression.EqProperty("LineA", "ln.Id"), 
    Expression.EqProperty("LineB", "ln.Id"))) 
.Add(Expression.Eq("GroupTypeId", 1)); 

crit.Add(Subqueries.Gt(0, count)); 
+0

您的查询看起来没问题。你正在寻找一个更好的方法来做到这一点,或者你的查询不能像它应该那样工作吗? – tolism7 2009-11-27 12:40:38

+0

它不起作用。引发异常,但我不记得该消息。我得到它的工作,并会发布答案 – svallory 2009-11-29 00:38:02

+0

你应该花时间来检查你收到的例外,并与您的问题发布。 – UpTheCreek 2011-05-01 09:56:22

回答

0

我明白了!

crit.Add(Expression.Sql(
    "EXISTS(select 1 from Group" + 
    "WHERE ({alias}.Id=LineA OR {alias}.Id=LineB)"+ 
    "AND GroupTypeId = ?)", (int) type, NHibernateUtil.Int32)); 

{alias}是被查询对象的占位符。

+0

虽然不是真的使用标准。 – UpTheCreek 2011-05-01 09:55:40

相关问题