使用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
我找到了一种方法来获得我想要的结果。叠加"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