LINQ to Nhibernate复制连接
我有这样的查询
var orderedQueryable = this.participationRequests
.Fetch(x => x.CommunityEvent)
.Fetch(x => x.CommunityMember)
.ThenFetch(x => x.User)
.Where(x => x.CommunityMember.Community.Id == communityId)
.OrderBy(x => x.CreateDate);
由于此错误,where子句需要在获取后进行。 问题是,thouse Fetch
调用发出其他连接。 在SQL查询中,如下所示:
select *
from ParticipationRequests participat0_
left outer join CommunityEvents communitye1_
on participat0_.CommunityEventId = communitye1_.Id
left outer join CommunityMembers communitym2_
on participat0_.CommunityMemberId = communitym2_.Id
left outer join Users user3_
on communitym2_.UserId = user3_.Id
inner join CommunityMembers communitym4_
on participat0_.CommunityMemberId = communitym4_.Id
inner join CommunityMembers communitym5_
on participat0_.CommunityMemberId = communitym5_.Id
inner join Communities community6_
on communitym5_.CommunityId = community6_.Id
where community6_.Id = 2002 /* @p0 */
order by participat0_.CreateDate asc
它进行内部连接以在CommunityId
上放置一个条件,并执行左外部连接来执行抓取。
我发现类似的问题,但我的查询有不同的执行计划,有和没有额外的连接。
这是LINQ提供程序中的错误吗? 也许有一个解决方法?
在nhibernate jira上添加了问题
不完全确定,但删除你的查询,而是使用联接的东西
在x.CommunityMember.Community on communityId中加入o等于x.communityMember.Community.Id(我的语法比较完整,但可以作为提示服务于你)
正如Sly提到的,这是Linq对NHibernate的一个已知问题。
我能够通过使用HQL而不是Linq来解决这个问题。 你的结果会是这样的:
CommunityEvent ce = null;
CommunityMember cm = null;
var queryable = this.participationRequests
.JoinAlias(x => x.CommunityEvent, () => ce)
.JoinAlias(x => x.CommunityMember, () => cm)
.Where(() => cm.Community.Id == communityId)
.OrderBy(x => x.CreationDate);
链接地址: http://www.djcxy.com/p/60993.html