1

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

谢谢

4

1 回答 1

0

不 - 使用“OR”是不可能的,只有“AND”......

于 2014-01-13T11:15:20.190 回答