gpt4 book ai didi

c# - Nhibernate QueryOver 左外连接条件

转载 作者:太空狗 更新时间:2023-10-30 00:45:09 26 4
gpt4 key购买 nike

我在网上找到了一些资源,但还没有真正解决这个问题

基本上我有一个有两个左外连接的查询

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

这可能是一种无效的方式,但它似乎不会中断。现在我想做的是在两个表上留下了外部连接,我想确保这两个表中的 Deleted 列都是假的。

然而,每当我添加该限制时,结果只会在新闻帖子中的外键列被填充时返回,但由于这是可以为 null 的,以及为什么我将其设为左外连接,这是不可取的。

基本上制作它的最佳方法是什么

.Where(x => !x.Deleted && !x.PostedBy.Deleted && !x.Category.Deleted);

我研究了多重查询、 future 和析取,我不确定应该采取什么方法,显然我可以想出几种方法(我的直觉告诉我不好的方法)但是什么是正确的方法? :)

谢谢

编辑 - 接受的答案修改

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

最佳答案

我想你的查询应该是这样的

        Session.QueryOver<NewsPost>()
.Left.JoinAlias(x => x.PostedBy, () => userAlias)
.Left.JoinAlias(x => x.Category, () => categoryAlias)
.Where(x => !x.Deleted)
.And(x => !userAlias.Deleted)
.And(x => !categoryAlias.Deleted);

关于c# - Nhibernate QueryOver 左外连接条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6170232/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com