Я пытаюсь написать критерий запроса для случая, в котором сущность, по которой я пытаюсь фильтровать, имеет много-много взаимосвязей с другой. Критерий включает в себя два или более условий для множества отношений, которые могут быть И или ИЛИ вместе. Например:
Базовый объект:
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
, прежде чем добавить его в качестве условия в основной запрос. Я понимаю, что это не работает, потому что есть только одна Любая помощь будет принята с благодарностью!