使用nHibernate查询列表中的所有项

本文关键字:nHibernate 查询 列表 使用 | 更新日期: 2023-09-27 17:49:36

我知道有限制"In",它允许检测属性中的一个或多个元素是否在目标列表中,但我需要一些东西,它会告诉我是否所有的属性项都在目标列表中。下面是一个例子:

我想要一个具备所有这些能力的人

CompetenciesCriterion : IList<Competency>
  { Walking, Running, Rolling }

在PersonA和PersonB之间:

PersonA : Person
  Competencies : IList<Competency>
    { Walking }
PersonB : Person
  Competencies : IList<Competency>
    { Walking, Rolling, Running }

是否有限制或表达式允许我执行此搜索,或者您知道一种干净的方法来执行此操作,而不是将"In"堆叠在"连接"中?

提前感谢,

艾蒂安Brouillard

使用nHibernate查询列表中的所有项

我找到了一种方法来获得我想要的结果。叠加"In"不工作,所以我发现使用子查询和计数"In"将产生一个标准,我可以验证计数相等的条件。

下面是一个示例:

var competencySubQuery = DetachedCriteria.For<Employee>("employee2");
competencySubQuery.CreateAlias("employee2.Competencies", "employee2Competencies");
competencySubQuery.SetProjection(Projections.Count(Projections.Property("employee2Competencies.Competency")));
competencySubQuery.Add(Restrictions.In("employee2Competencies.Competency",     searchCriteria.Competencies));
competencySubQuery.Add(Restrictions.EqProperty("employee2.Id", "Employee.Id"));
criteriaJunction.Add(Subqueries.Eq(searchCriteria.Competencies.Count(), competencySubQuery));

criteriaJunction是最后用于FindAll和searchCriteria的标准作为包含发送给服务的标准的POCO