我正在尝试将 a 加入JobPart
到 aTitlePartRecord
和 a中,并对Title 或 Body 部分中包含的文本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,其中有人遇到了与此处描述的相同的问题:
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
,并且“文本”不是 的属性TitlePart
,而是BodyPart
.
谁能指出我正确的方向来执行OR
跨连接?当然我错过了一些小东西。
谢谢