C# 如何使用Fluent NHibernate创建IN子句

C# 如何使用Fluent NHibernate创建IN子句,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,在这里,我得到了一份代表可以访问的机构列表 var agencies = _session.QueryOver<AgencyRep>() .JoinQueryOver<AgencyRepsSecondaryAgency>(r => r.AgencyRepsSecondaryAgencies) .Where(a => a.AgencyRepId == user.Id) .List(); var代理=\u session.QueryOve

在这里,我得到了一份代表可以访问的机构列表

var agencies = _session.QueryOver<AgencyRep>()
    .JoinQueryOver<AgencyRepsSecondaryAgency>(r => r.AgencyRepsSecondaryAgencies)
    .Where(a => a.AgencyRepId == user.Id)
    .List();
var代理=\u session.QueryOver()
.JoinQueryOver(r=>r.AgencyRepsSecondary Agencies)
.Where(a=>a.AgencyRepId==user.Id)
.List();
在获得代理列表后,我希望执行SQL搜索,其中值位于agencies.id列中

var data = _session.QueryOver<Staging.Case>()
                .Where(x => x.AgencyId ???? agencies)
                .List();
var data=\u session.QueryOver()
.Where(x=>x.AgencyId???代理)
.List();

不知道如何用fluent nhibernate实现类似的功能。任何帮助都将不胜感激。

这应该有效,未经测试,但您可以尝试:

var subquery = QueryOver.Of<AgencyRep>()
    .JoinQueryOver<AgencyRepsSecondaryAgency>(r => r.AgencyRepsSecondaryAgencies)
    .Where(a => a.AgencyRepId == user.Id)

var data = _session.QueryOver<Staging.Case>()
    .WithSubquery.WhereProperty(x => x.AgencyId).In(subquery)
    .List();
var subquery=QueryOver.Of()
.JoinQueryOver(r=>r.AgencyRepsSecondary Agencies)
.Where(a=>a.AgencyRepId==user.Id)
var data=\u session.QueryOver()
.WithSubquery.WhereProperty(x=>x.AgencyId).In(子查询)
.List();

这应该可以,未经测试,但您可以尝试:

var subquery = QueryOver.Of<AgencyRep>()
    .JoinQueryOver<AgencyRepsSecondaryAgency>(r => r.AgencyRepsSecondaryAgencies)
    .Where(a => a.AgencyRepId == user.Id)

var data = _session.QueryOver<Staging.Case>()
    .WithSubquery.WhereProperty(x => x.AgencyId).In(subquery)
    .List();
var subquery=QueryOver.Of()
.JoinQueryOver(r=>r.AgencyRepsSecondary Agencies)
.Where(a=>a.AgencyRepId==user.Id)
var data=\u session.QueryOver()
.WithSubquery.WhereProperty(x=>x.AgencyId).In(子查询)
.List();
试试这个:

var data = _session.QueryOver<Staging.Case>()
            .WhereRestrictionOn(x => x.AgencyId).IsIn(agencies.Select(a => a.Id).ToArray())
            .List();
var data=\u session.QueryOver()
.WhereRestrictionOn(x=>x.AgencyId).IsIn(agents.Select(a=>a.Id).ToArray())
.List();
编辑:如果您以后不需要代理,您可以通过以下方式进行优化:

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();
var-agencyIds=\u session.QueryOver()
.JoinQueryOver(r=>r.AgencyRepsSecondary Agencies)
.Where(a=>a.AgencyRepId==user.Id)
.选择(a=>a.Id)
.List()//如果.Id的类型为long-请替换为正确的类型
var data=\u session.QueryOver()
.WhereRestrictionOn(x=>x.AgencyId).IsIn(agencyIds.ToArray())
.List();
这样可以保存通过连接发送的一点数据

请尝试以下操作:

var data = _session.QueryOver<Staging.Case>()
            .WhereRestrictionOn(x => x.AgencyId).IsIn(agencies.Select(a => a.Id).ToArray())
            .List();
var data=\u session.QueryOver()
.WhereRestrictionOn(x=>x.AgencyId).IsIn(agents.Select(a=>a.Id).ToArray())
.List();
编辑:如果您以后不需要代理,您可以通过以下方式进行优化:

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();
var-agencyIds=\u session.QueryOver()
.JoinQueryOver(r=>r.AgencyRepsSecondary Agencies)
.Where(a=>a.AgencyRepId==user.Id)
.选择(a=>a.Id)
.List()//如果.Id的类型为long-请替换为正确的类型
var data=\u session.QueryOver()
.WhereRestrictionOn(x=>x.AgencyId).IsIn(agencyIds.ToArray())
.List();

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

这真是太棒了,而且工作得很好。谢谢你们的快速帮助和回复。在这个过程中,我学到了很多。这真是太棒了,而且效果很好。谢谢你们的快速帮助和回复。在这个过程中,我学到了很多。