Orchard 1.6 HQL - 在连接表中的OR谓词?

时间:2013-09-10 16:29:41

标签: hql orchardcms orchardcms-1.6

我尝试将JobPart加入TitlePartRecordBodyPartRecord,并对标题中包含的文字执行逻辑OR或身体部位。

我的第一次尝试是使用ContentManager加入部分,但是,我无法执行OR,只能执行AND,因为只有WHERE子句应用于上面的Join

        var q = _orchardServices.ContentManager.Query<JobPart>()
                .Join<TitlePartRecord>()
                .Where(r => r.Title.Contains(filter.FreeText))
                .Join<BodyPartRecord>()
                .Where(r => r.Text.Contains(filter.FreeText))
                .List();

所以上面的内容将返回JobParts,其中搜索词位于Body和Title部分,而不是两者中。

我的下一次尝试是使用HqlQuery,其中有人遇到了here描述的相同问题:

        var q = _orchardServices.ContentManager.HqlQuery()
                .ForPart<JobPart>()
                .Join(x => x.ContentPartRecord<TitlePartRecord>())
                .Join(x => x.ContentPartRecord<BodyPartRecord>())
                .Where(alias => alias.ContentPartRecord<TitlePartRecord>(),
                        factory => factory.Or(
                            lhs => lhs.InsensitiveLike("Title", filter.FreeText, HqlMatchMode.Anywhere),
                            rhs => rhs.InsensitiveLike("Text", filter.FreeText, HqlMatchMode.Anywhere)));

然而,由于OR被应用于TitlePart,并且&#34; Text&#34;不是TitlePart的属性,而是BodyPart

有人能指出我在正确的方向在整个联接中执行OR吗?当然,我错过了一些小事。

谢谢

1 个答案:

答案 0 :(得分:0)

不 - “OR”不可能,只有“AND”....