2012-07-19 69 views
0

我一直在这一天作战,似乎无法得到我想要的结果。我想要获取标记集合中具有特定标记的所有节点。nHibernate queryover复杂查询

我正在使用这个QueryOver命令,但我得到所有可能的节点,即使它在我看来,因为它应该只有一个。

public IEnumerable<Node> GetAllWithTag(int tagId) 
    { 
     tags = new List<Tag>(); 
     Node node = null; 
     Tag tagQ = null; 

     var subQuery = QueryOver.Of<Tag>(() => tagQ) 
      .Where(tag1 => tag1.Id == tagId).DetachedCriteria; 

     subQuery = subQuery.SetProjection(Projections.Property("Id")); 

     var nodes = _applicationUnitOfWork.GetSession().QueryOver<Node>(
      () => node).Where(Subqueries.Exists(subQuery)).List<Node>(); 

     return nodes; 
    } 

我使用这个奇怪的设置,因为我有一个方法错误,当我尝试使用包含在node.Tags。所以我仔细阅读了一下,似乎大多数人都喜欢这样的解决方案。我无法弄清楚我在做些什么愚蠢的事情。非常感谢任何帮助!

回答

2

您是否尝试过使用JoinQueryOver or JoinAlias

事情是这样的:

public IEnumerable<Node> GetAllWithTag(int tagId) 
{ 
    return _applicationUnitOfWork.GetSession().QueryOver<Node>() 
     .JoinQueryOver<Tag>(n => n.Tags) 
      .Where(t => t.Id == tagId) 
      .List<Node>(); 
} 
+0

这工作就像一个魅力。谢谢! – Phil 2012-07-20 08:28:22