我尝试将JobPart
加入TitlePartRecord
和BodyPartRecord
,并对标题中包含的文字执行逻辑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
吗?当然,我错过了一些小事。
谢谢
答案 0 :(得分:0)
不 - “OR”不可能,只有“AND”....