オンラインでいくつかのリソースを見つけましたが、実際にはこれを整理することができませんでした
基本的に、2つの左外部結合を持つクエリがあります
var query = session.QueryOver<NewsPost>(() => newsPostAlias)
.Left.JoinQueryOver(x => newsPostAlias.PostedBy, () => userAlias)
.Left.JoinQueryOver(x => newsPostAlias.Category, () => categoryAlias)
.Fetch(x => x.PostedBy).Eager
.Fetch(x => x.Category).Eager
.Where(x => !x.Deleted);
これは無効な方法かもしれませんが、壊れていないようです。ここで、外部結合を残した2つのテーブルで、これらの両方のテーブルのDeleted列がfalseであることを確認します。
ただし、その制限を追加すると、ニュース投稿の外部キー列にデータが入力された場合にのみ結果が返されますが、これはnull可能であり、なぜそれを左外部結合にしたのかは望ましくありません。
基本的にそれを作るための最良の方法は何ですか
.Where(x => !x.Deleted && !x.PostedBy.Deleted && !x.Category.Deleted);
私は複数の質問、先物、論理和を調べましたが、どのアプローチを取るべきかわかりません。明らかに、これを行うためのいくつかの方法(私の腸が私に言う悪い方法)を考えることができますが、正しい方法は何ですか?:)
ありがとう
編集-承認された回答の変更
return session.QueryOver(() => newsPostAlias)
.Fetch(x => x.PostedBy).Eager
.Fetch(x => x.Category).Eager
.Left.JoinQueryOver(() => newsPostAlias.PostedBy, () => postedByAlias)
.Left.JoinQueryOver(() => newsPostAlias.Category, () => categoryAlias)
.Where(() => !newsPostAlias.Deleted)
.And(() => newsPostAlias.PostedBy == null || !postedByAlias.Deleted)
.And(() => newsPostAlias.Category == null || !categoryAlias.Deleted)
.OrderBy(() => newsPostAlias.PostedDate).Desc
.Take(10)
.List();