У меня есть класс A, у которого есть список B, и мне нужно отфильтровать по 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 часов, стуча головой по нему, я сдался.
Любойпомощь приписывается