我的查询列表中出现重复结果的问题。
我有两个FetchMany
关于我的存储库的方法:
public IQueryable<MyEntity> Query()
{
return Session.Query<MyEntity>()
.FetchMany(x => x.ListA)
.FetchMany(x => x.ListB);
}
询问:
var result = _myEntityRepository
.Query()
.Where(x => names.Contains(x.Name))
.Where(x => x.ListA.Any(m => listAIds.Contains(m.Id)))
.Where(x => x.ListB.Any(m => listBIds.Contains(m.Id)))
.OrderBy(x => x.CreationDate)
.ToList();
映射:
HasManyToMany(x => x.ListA)
.Table("MY_ENTITY_TYPE_A")
.ParentKeyColumn("MYENTITY_ID")
.ChildKeyColumn("MYENTITYA_ID")
.Fetch.Join();
ListA
是具有多个属性的类 MyEntityA。
ListB
是具有多个属性的类 MyEntityB。
生成的 SQL 很好,并且得到了我需要的值,但是这些值被添加ListA
并被ListB
重复了几次。ListA 和 ListB 是单独的表(多对多)。
我用fluent-nhibernate
.
我查找了使用ToFuture
,但这只是给了我Method Not Implemented Exception
,我不想在我的存储库之外使用 NHibernate。
这是我尝试过的:
public IQueryable<MyEntity> Query()
{
var query = Session.Query<MyEntity>();
Session.Query<MyEntity>().FetchMany(x => x.ListA).ToFuture();
Session.Query<MyEntity>().FetchMany(x => x.ListB).ToFuture();
return query;
}
异常被抛出:
Session.Query<MyEntity>().FetchMany(x => x.ListA).ToFuture();
TargetInvocationException
抛出内部异常“方法或操作未实现”。
堆栈跟踪:
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
at NHibernate.Linq.DefaultQueryProvider.ExecuteFutureQuery(NhLinqExpression nhLinqExpression, IQuery query, NhLinqExpression nhQuery)
at NHibernate.Linq.DefaultQueryProvider.ExecuteFuture(Expression expression)
at NHibernate.Linq.LinqExtensionMethods.ToFuture[T](IQueryable`1 query)
怎么能做到这一点?目前我Disctint
在 ListA 和 ListB 上做,但它似乎更慢并且对于创建的实体中的所有重复值不太好。
MyEntity 在 ListA 中有许多 EntityA 项,在 ListB 中有许多 EntityB 项,但数据库中没有重复项。
注意:我必须对两者都使用 FetchMany,否则选择查询会太多!