0

我一直在为此奋斗一整天,似乎无法得到我想要的结果。我想在其标签集合中获取所有具有特定标签的节点。

我正在使用这个 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 上使用 Contains 时出现方法错误。所以我阅读了一下,似乎大多数人都采用了这样的解决方案。我只是不知道我在哪里做一些愚蠢的事情。非常感谢您的帮助!

4

1 回答 1

2

您是否尝试过使用JoinQueryOverorJoinAlias

像这样的东西:

public IEnumerable<Node> GetAllWithTag(int tagId)
{
    return _applicationUnitOfWork.GetSession().QueryOver<Node>()
        .JoinQueryOver<Tag>(n => n.Tags)
            .Where(t => t.Id == tagId)
            .List<Node>();
}
于 2012-07-19T15:16:51.157 回答