Nhibernate 无法将集合与非表达式一起使用

Nhibernate 无法将集合与非表达式一起使用,nhibernate,Nhibernate,我刚刚钻研了一点NHibernate,我遇到了一个更“复杂”(对我来说!)的问题,我不得不写。情况是: 我有一个“Staff”对象,它附带了一组“技能”。我想输入一份需要查询的“技能”列表(例如,如果我只想要能够“烹饪”或“编码”或两者兼有的人),然后返回一份匹配员工的列表,但我有点麻烦 我得到的对象方面的信息是: public class StaffMember : Resource { public virtual string EmployeeId { get; set; }

我刚刚钻研了一点NHibernate,我遇到了一个更“复杂”(对我来说!)的问题,我不得不写。情况是:

我有一个“Staff”对象,它附带了一组“技能”。我想输入一份需要查询的“技能”列表(例如,如果我只想要能够“烹饪”或“编码”或两者兼有的人),然后返回一份匹配员工的列表,但我有点麻烦

我得到的对象方面的信息是:

public class StaffMember : Resource
{
    public virtual string EmployeeId { get; set; }      

    public virtual bool IsTeamLeader { get; set; }

    public virtual StaffMember TeamLeader { get; set; }

    public virtual IList<Skill> Skills { get; set; }
}

public class Skill : BaseDomainObject
{
    public virtual string Name { get; set; }
}
我尝试在标准中使用“Expression.InG(“Skills”,skillsSearchList)”,但当两个集合在使用中时不能使用它(例如,如果他们只有一个技能,那就好了!)。。。有什么指示吗?

你需要

.CreateAlias("Skills", "sks")
.Add(Restrictions.In("sks.id", skillIdList))
我不确定这是否可以通过技能对象列表来完成。无论哪种方式,sql都将以与上面相同的方式结束


请注意,这将创建笛卡尔乘积,因此您可能希望使用现有子查询或
.SetResultTransformer(新的DistinctRootEntityResultTransformer())
来获取不同员工的列表。

它工作得很好!如前所述,它似乎不适用于技能对象,但ID很好,因为这是我从视图上的过滤器控件得到的。
.CreateAlias("Skills", "sks")
.Add(Restrictions.In("sks.id", skillIdList))