a を aと a の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();
したがって、上記は、検索語が 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
て、結合全体を実行できますか? 確かに私は何か小さなものを見逃しています。
ありがとうございました