C# 使用联接时避免子集合上的重复项

C# 使用联接时避免子集合上的重复项,c#,nhibernate,C#,Nhibernate,我在调查Nhibernate FROM Entity e LEFT JOIN FETCH e.Collection1 LEFT JOIN FETCH e.Collection2 LEFT JOIN FETCH e.Collection3 由于连接,我在Collection3上多次重复使用相同的元素。如何在避免重复项目的同时快速加载所有集合?我认为您可以使用“Transformers.distinctroventy”: session.QueryOver() .F

我在调查Nhibernate

FROM             Entity e
LEFT JOIN FETCH  e.Collection1
LEFT JOIN FETCH  e.Collection2
LEFT JOIN FETCH  e.Collection3 
由于连接,我在Collection3上多次重复使用相同的元素。如何在避免重复项目的同时快速加载所有集合?

我认为您可以使用
“Transformers.distinctroventy”

session.QueryOver()
.Fetch(entity=>entity.SubEntity).Eager
.变压器使用(变压器.距离)
.List();
但它是在web服务器层完成的(不是SQL server)


如果只想获取一些字段(而不是实体),可以使用Distinct或Group By。

使用一个join进行即时加载,然后
。TransformUsing(Transformers.distinctropenty)
就可以了。请参见此示例(使用即时加载可能会产生意外结果)。但是,一旦有两个或多个联接,则
TransformUsing
就会发生故障

从Ayende tilted
中可以看到这一点,他们急切地用NHibernate高效地加载实体关联

session.QueryOver<Entity>()
   .Fetch(entity => entity.SubEntity).Eager
   .TransformUsing(Transformers.DistinctRootEntity)
   .List();