Критерии NHibernate делают запрос ко многим ко многим с AND - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь написать критерий запроса для случая, в котором сущность, по которой я пытаюсь фильтровать, имеет много-много взаимосвязей с другой. Критерий включает в себя два или более условий для множества отношений, которые могут быть И или ИЛИ вместе. Например:

Базовый объект:

public class Student
{
    ...

    public ICollection<Attribute> Attributes { get; set; }
}

public class StudentMap : ClassMap<Student>
{
     HasManyToMany(s => s.Attributes).Table("${Student.TableName}_{Attribute.TableName}")
            .Cascade.All();
}

Мне нужно запросить эти отношения таким образом, как All Students who have Attribute A AND Attribute B.

В настоящее время я написал следующее, которое работает, но только если есть условие одного атрибута (без AND):

var subQuery = DetachedCriteria.For<Attribute>("attr")
    .SetProjection(Projections.Id()).Add(Expression.Eq("Code", "A"))
    .Add(Property.ForName("attr.Id").EqProperty("ats.Id"));

var query = DetachedCriteria.For<Student>("stu")
    .CreateAlias("Attributes", "ats").Add(Subqueries.Exists(subQuery));

Я попытался взять подзапросы и создать из них Conjunction, прежде чем добавить его в качестве условия в основной запрос. Я понимаю, что это не работает, потому что есть только одна Любая помощь будет принята с благодарностью!

...