Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在NHibernate中查询多对多关联?_C#_Nhibernate_Fluent Nhibernate_Hql - Fatal编程技术网

C# 如何在NHibernate中查询多对多关联?

C# 如何在NHibernate中查询多对多关联?,c#,nhibernate,fluent-nhibernate,hql,C#,Nhibernate,Fluent Nhibernate,Hql,我有两个实体,Post和Tag。Post实体具有一组标记,这些标记表示两个实体之间的多对多连接,即,每个Post可以具有任意数量的标记,并且每个标记可以与任意数量的Post关联 我正在尝试检索所有具有给定标记的帖子。然而,我似乎无法正确回答这个问题。我基本上想要与以下伪HQL相同的东西: from Posts p where p.Tags contains (from Tags t where t.Name = :tagName) order by p.DateTime 我发现的唯一一件事甚至

我有两个实体,Post和Tag。Post实体具有一组标记,这些标记表示两个实体之间的多对多连接,即,每个Post可以具有任意数量的标记,并且每个标记可以与任意数量的Post关联

我正在尝试检索所有具有给定标记的帖子。然而,我似乎无法正确回答这个问题。我基本上想要与以下伪HQL相同的东西:

from Posts p
where p.Tags contains (from Tags t where t.Name = :tagName)
order by p.DateTime
我发现的唯一一件事甚至接近于这一点是。然而,他的方法要求另一端的实体(在我的例子中是Tag)有一个集合,显示多对多的另一端。我没有这个,也不想拥有它。我很难相信这是不可能的。我错过了什么

我的实体和映射如下所示:

public class Post {
    public virtual int Id { get; set; }
    public virtual string Title { get; set; }
    private IList<Tag> tags = new List<Tag>();

    public virtual IEnumerable<Tag> Tags {
        get { return tags; }
    }

    public virtual void AddTag(Tag tag) {
        this.tags.Add(tag);
    }
}

public class PostMap : ClassMap<Post> {
    public PostMap() {
        Id(x => x.Id).GeneratedBy.HiLo("99");
        Map(x => x.Title);
        HasManyToMany(x => x.Tags);
    }
}

// ----

public class Tag {
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

public class TagMap : ClassMap<Tag> {
    public TagMap () {
        Id(x => x.Id).GeneratedBy.HiLo("99");
        Map(x => x.Name).Unique();
    }
}

看来我找到答案了。我不太清楚为什么我没有想到昨天,但你可以把它转过来,用在我身上


比我想象的容易

看来我找到了答案。我不太清楚为什么我没有想到昨天,但你可以把它转过来,用在我身上

比我想象的容易

from Post p
where (
    select t 
    from Tag t 
    where t.Name = :tagName
) in elements(p.Tags)
order by p.DateTime