NHibernate多表查询多次返回同一行

时间:2012-03-15 17:57:02

标签: nhibernate

以下nhibernate查询导致我出现问题,因为它会返回同一行,因为子表具有多个符合所提供条件的行。我想知道的是nhibernate中执行相同查询的最有效/最佳实践,但只能获取DataMappingBase中的每一行。返回同一行的多个是打破我返回的结果数,因为我试图限制它25但有时我得到同一行25次。

MappedID id = null;
DataMappingBase mapBase = null;
NameDetails name = null;
dmbs = mappingSession.QueryOver<DataMappingBase>(() => mapBase)
   .JoinAlias(() => mapBase.IDs, () => id).WhereRestrictionOn(() => id.SecondaryDataIDType).IsNull()
   .JoinAlias(() => mapBase.Names, () => name).WhereRestrictionOn(() => name.Name).IsInsensitiveLike(request.Filter, MatchMode.Anywhere)
   .Take(request.MaxResults)
   .List();

我目前正在考虑将上面的查询转换为分离查询并删除“take”子句并让它只返回匹配行的ID并将其用于从“DataMappingBase”中选择的子查询中行ID在子查询返回的ids中,但我不确定这是否是最佳方式。

1 个答案:

答案 0 :(得分:2)

我不确定,但你可以这样做:

MappedID id = null;
DataMappingBase mapBase = null;
NameDetails name = null;
dmbs = mappingSession.QueryOver<DataMappingBase>(() => mapBase)
   .JoinAlias(() => mapBase.IDs, () => id).WhereRestrictionOn(() => id.SecondaryDataIDType).IsNull()
   .JoinAlias(() => mapBase.Names, () => name).WhereRestrictionOn(() => name.Name).IsInsensitiveLike(request.Filter, MatchMode.Anywhere)
   .Take(request.MaxResults)
   // add this
   .TransformUsing(Transformers.DistinctRootEntity)
   .List();