1

a を aと a のJobPart両方に結合し、タイトルまたはボディ部分に含まれるテキストの論理を実行しようとしています。TitlePartRecordBodyPartRecordOR

私の最初の試みは、 を使用してパーツを結合することでしたが、句はすぐ上にのみ適用されるため、 のみContentManagerを実行できません。ORANDWHEREJoin

        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();

したがって、上記は、検索語が Body 部分と Title 部分の両方にあり、どちらにも含まれていない JobParts を返します。

私の次の試みは、誰かがここで説明されている同じ問題を抱えている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、"Text" は のプロパティではなく、 のプロパティであるためTitlePart、これは失敗しますBodyPart

誰かが私を正しい方向に向けORて、結合全体を実行できますか? 確かに私は何か小さなものを見逃しています。

ありがとうございました

4

1 に答える 1