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();
这样可以节省通过连接发送的一点数据这真是太棒了,而且工作得很好。谢谢你们的快速帮助和回复。在这个过程中,我学到了很多。这真是太棒了,而且效果很好。谢谢你们的快速帮助和回复。在这个过程中,我学到了很多。