我正在尝试将 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跨连接?当然我错过了一些小东西。
谢谢