我有一个B列表的A类,我需要根据C进行过滤
这是地图
AMap
public AMap()
{
Id(x => x.IdA, "IdA").GeneratedBy.Identity();
HasMany<B>(x => x.B)
.BatchSize(50)
.KeyColumn("IdA")
.Cascade
.AllDeleteOrphan()
.Inverse()
.Not.LazyLoad();
}
BMap
public BMap()
{
Id(x => x.IdB, "IdB").GeneratedBy.Identity();
References(x => x.C, "IdC").LazyLoad();
References(x => x.A, "IdA").LazyLoad();
Setup();
}
还有我的提取代码
//listC is a List<C> passed to the method
var criteria = DetachedCriteria.For<A>()
.CreateCriteria("B", "b")
.Add(Restrictions.Or(
Restrictions.In("C.IdC", listC.Select(ug => ug.IdC).ToArray()),
Restrictions.IsNull("C.IdC")))
.SetResultTransformer(Transformers.AliasToEntityMap);
var result = criteria.GetExecutableCriteria(Session);
return list;
NHibernate Profiler报告选择发生了N + 1次,并且性能很差。
我也尝试过使用QueryOver,但无法根据业务逻辑过滤结果
最后9个小时,我敲了敲头,我放弃了。
任何帮助都