无法使用InExpression集合

Pau*_*aul 3 nhibernate

我刚刚钻研了一些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; }
}
Run Code Online (Sandbox Code Playgroud)

我想SQL会像这样:

select distinct st.*
from staff st, resource re
inner join staffskills sks on re.id = sks.staffresourceid
inner join skill ski on ski.id = sks.skillid
where st.resourceid = re.id
and ski.id in (1,2,3,4)
Run Code Online (Sandbox Code Playgroud)

我试图在标准中使用"Expression.InG("技能",技能搜索列表)"但是当两个集合在游戏中时不能使用(例如,如果他们只有一个技能,那就没问题了!)..任何指针?

dot*_*joe 5

你需要

.CreateAlias("Skills", "sks")
.Add(Restrictions.In("sks.id", skillIdList))
Run Code Online (Sandbox Code Playgroud)

我不确定是否可以使用技能对象列表完成此操作.无论哪种方式,sql将最终与上面相同.

请注意,这将创建一个笛卡尔积,因此您可能希望使用存在子查询或.SetResultTransformer(new DistinctRootEntityResultTransformer())获取不同Staff的列表.