使用NHibernate QueryOver带有Or子查询

4

好的,我来翻译一下。这是一个关于NHibernate查询的问题:

嗯,我在这个问题上有些迷茫。我有一个NHibernate查询,大致如下:

  var subQuery = QueryOver.Of<Lead>()
            .Where(x => x.Client == user.Client)
            .And(x => x.LeadType == leadType && x.LeadType != LeadTypeEnum.Self)
            .Select(Projections.Distinct(Projections.Id()));

我使用这个。
  var query = Session.QueryOver<Lead>()
            .WithSubquery.WhereProperty(x => x.Id).In(subQuery);

这会产生我所需的内容。
Where lead.id in (select Id from .......)

然而,我需要添加另一个子查询。像上面那样很容易做到,但我需要它产生以下结果。
Where lead.id in (select id from .....)
or lead.id in (select id from .......)

问题是我总是得到以下错误信息。
Where lead.id in (select id from .....)
and lead.id in (select id from .......)

请问有人能指导我正确地获取Or吗?

1个回答

3

我自己也是NH新手,但你可以尝试创建一个分离并将条件添加到其中,然后将该分离添加到QueryOver的Where调用中。

var disjunction = new Disjunction();
disjunction.Add(subQuery1);
disjunction.Add(subQuery2);
var query = Session.QueryOver<Lead>()
    .Where(disjunction);

我曾经考虑过类似的事情,但是我遇到了错误13参数1:无法将“NHibernate.Criterion.QueryOver<wow.Common.Model.ContactLead,wow.Common.Model.ContactLead>”转换为“NHibernate.Criterion.ICriterion”。 - Tanzy
1
你尝试过像 disjunction.Add(subQuery1.UnderlyingCriteria) 或者 disjunction.Add(subQuery1.DetachedCriteria) 这样的方法吗? - Josh Anderson
不在我的电脑旁边,但如果我没记错的话,我会遇到相同或类似的问题。 - Tanzy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接