我正在尝试为一种情况查询标准查询,在这种情况下,我要过滤的实体与另一个实体存在多对多关系。该标准包括可以进行“与”或“或”运算的多对多关系中的两个或多个条件。例如:
基本实体:
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
。我知道这是行不通的,因为只有一个。不胜感激!