在生成的sql代码的count查询中防止不必要的交叉连接

cs0*_*815 5 linq nhibernate

我正在使用此查询:

return from oi in NHibernateSession.Current.Query<BlaInteraction>()
select new BlaViewModel
{
  ...

  NoPublications = oi.Publications.Count(), 

  ...
};
Run Code Online (Sandbox Code Playgroud)

BlaInteraction包含IList的出版物(即实体).要确定出版物的数量,实际上并不需要为出版物进行所有连接.我能否以某种方式阻止nhibernate在生成的sql中使用连接(例如使用投影???)?

谢谢.

基督教

PS:

这就是NH产生的(略微适应):

select cast(count(*) as INT) from RelationshipStatementPublications publicatio21_, Publication publicatio22_ inner join Statements publicatio22_1_ on publicatio22_.StatementId=publicatio22_1_.DBId where publicatio21_.StatementId = 22762181 and publicatio21_.PublicationId=publicatio22_.StatementId
Run Code Online (Sandbox Code Playgroud)

这就足够了:

select cast(count(*) as INT) from RelationshipStatementPublications publicatio21_ where publicatio21_.StatementId = 22762181
Run Code Online (Sandbox Code Playgroud)

cs0*_*815 2

到目前为止,我发现的最佳解决方案是使用 FNH 公式:

mapping.Map(x => x.NOPublications).Formula("(select count(distinct RelationshipStatementPublications.PublicationId) from RelationshipStatementPublications where RelationshipStatementPublications.StatementId = DBId)");

public virtual int NOPublications {get; private set;}
Run Code Online (Sandbox Code Playgroud)

当我从域映射到视图模型时,我使用:

NoPublications = oi.NOPublications,
Run Code Online (Sandbox Code Playgroud)

基督教