gpt4 book ai didi

c# - NHibernate - LINQ 查询多对多问题

转载 作者:太空宇宙 更新时间:2023-11-03 16:21:21 25 4
gpt4 key购买 nike

我正在尝试升级现有应用程序以使用 NHibernate。我的数据库有下表:

Sites:
- Id (PK)
- Name

Categories:
- Id (PK)
- Name

CategoriesSite
- CategoryId (PK)
- SiteId (PK)
- Active

对于每个类别和站点,CategoriesSite 表中可能存在也可能不存在记录。如果 CategoriesSite 表中存在某个项目,则它可以通过将 Active 设置为 false 来关闭该类别。 如果不是,则假定 Active 为真

我想在 NHibernate 中创建一个 LINQ 查询来过滤特定网站(活跃的)的类别。例如说我有以下数据:

Sites:
Id | Name
1 | Site 1
2 | Site 2

Categories:
Id | Name
1 | Category 1
2 | Category 2

CategoriesSite:
CategoryId | SiteId | Active
1 | 1 | True
1 | 2 | True
2 | 1 | False

我可以说:

var categories = session.Query<CategorySite>()
.Where(s => s.Site.Id == 2 && s.Active)
.Select(s => s.Category)
.ToList();

然而,这只会得到第 1 类,而不是第 2 类,而我希望它这样做。我想知道是否有人做过类似的事情并且可以建议一种查询方法或提供任何关于如何更好地映射此场景的建议。

最佳答案

没有看到生成的查询,我只能猜测但是,试试这个:

var categories = session.Query<CategorySite>()
.Where(s => s.SiteId == 2 && s.Active) // not s.Site.Id
.Select(s => s.Category)
.ToList();

关于c# - NHibernate - LINQ 查询多对多问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13770217/

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