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

我正在使用此查询:

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

  NoPublications = oi.Publications.Count(), 

  ...
};

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

这就足够了:

select cast(count(*) as INT) from RelationshipStatementPublications publicatio21_ where publicatio21_.StatementId = 22762181
最佳答案
为什么你不能只创建另一个查询?

Session.QueryOver<Publication>().Where(x => x.BlaInteractionId == idSentAsParameter).Select(Projections.RowCount()).SingleOrDefault<int>();

我认为这会奏效

return from oi in NHibernateSession.Current.Query<BlaInteraction>()
select new BlaViewModel
{
  ...
  NoPublications = Session.QueryOver<Publication>().Where(x => x.BlaInteractionId == oi.Id).Select(Projections.RowCount()).SingleOrDefault<int>();

  ...
};

另一个编辑,你试过lazy=”extra”吗?

转载注明原文:linq – 在生成的sql代码的count查询中防止不必要的交叉连接 - 代码日志