【问题标题】:NHibernate QueryOver with an Or subquery带有 Or 子查询的 NHibernate QueryOver
【发布时间】:2011-06-13 20:08:44
【问题描述】:

好吧,我输了这个。我有一个看起来像这样的 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 .......)

有人可以指出我正确的方向以获取或请

【问题讨论】:

    标签: nhibernate queryover


    【解决方案1】:

    我自己是 NH 新手,但您可能想尝试创建析取并为其添加条件,然后将析取添加到 QueryOver Where 调用中。

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

    【讨论】:

    • 我想过类似的事情,但是,我得到错误 13 Argument 1: cannot convert from 'NHibernate.Criterion.QueryOver' 到'NHibernate.Criterion.ICriterion'
    • 您是否尝试过类似disjunction.Add(subQuery1.UnderlyingCriteria) 或disjunction.Add(subQuery1.DetachedCriteria) 的方法?
    • 现在不在我的电脑上,但如果记忆对我有用,我会遇到相同或类似的问题
    猜你喜欢
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多