我尝试使用析取和连接将过滤器应用于来自NHibernate会话的数据。我已经实现了如下:
var disjunction = new Disjunction();
foreach (var entry in filterCriteria.SelectedCriteria)
{
var conjunction = Restrictions.Conjunction();
conjunction.Add(Restrictions.Eq("SourceAccount", entry.SourceAccount));
conjunction.Add(Restrictions.Eq("SourceItemId", entry.SourceItemId));
conjunction.Add(Restrictions.Eq("SourceProgram", entry.SourceProgram));
disjunction.Add(conjunction);
}
criteria.Add(disjunction);
问题是SelectedCriteria集合中有大量组合,导致SQL查询具有WHERE的 lot (SourceAccount = x1,SourceItemId = x2,SourceProgram = x3) OR(SourceAccount = y1,SourceAccount = y2,SourceAccount = y3)或......等等。这意味着查询的性能很糟糕。
我的问题是如何更好地将大量的析取和连接应用于NHibernate查询?
答案 0 :(得分:0)
正如评论中所指出的,这更像是一个SQL查询问题而不是NHibernate问题。我通过改进完整查询的逻辑来解决它,以最小化产生的析取和连接的数量。