如何使用Fluent NHibernate创建一个IN子句

Gam*_*rub 0 c# nhibernate fluent-nhibernate

在这里,我获得了一个代表可以访问的代理商列表.

var agencies = _session.QueryOver<AgencyRep>()
    .JoinQueryOver<AgencyRepsSecondaryAgency>(r => r.AgencyRepsSecondaryAgencies)
    .Where(a => a.AgencyRepId == user.Id)
    .List();
Run Code Online (Sandbox Code Playgroud)

在我得到我的代理商列表之后,我想进行SQL搜索,其中值为agencies.id列.

var data = _session.QueryOver<Staging.Case>()
                .Where(x => x.AgencyId ???? agencies)
                .List();
Run Code Online (Sandbox Code Playgroud)

不知道如何用流利的nhibernate实现这样的东西.任何帮助将不胜感激.

Gob*_*lin 5

试试这个:

var data = _session.QueryOver<Staging.Case>()
            .WhereRestrictionOn(x => x.AgencyId).IsIn(agencies.Select(a => a.Id).ToArray())
            .List();
Run Code Online (Sandbox Code Playgroud)

编辑:如果您之后不需要代理商 - 您可以通过以下方式优化:

var agencyIds = _session.QueryOver<AgencyRep>()
    .JoinQueryOver<AgencyRepsSecondaryAgency>(r => r.AgencyRepsSecondaryAgencies)
    .Where(a => a.AgencyRepId == user.Id)
    .Select(a => a.Id)
    .List<long>(); //if your .Id is of type long - replace with the correct type

var data = _session.QueryOver<Staging.Case>()
            .WhereRestrictionOn(x => x.AgencyId).IsIn(agencyIds.ToArray())
            .List();
Run Code Online (Sandbox Code Playgroud)

这样可以节省通过连接发送的一些数据