c# - NHibernate QueryOver : How to join unrelated entities?

标签 c# join nhibernate queryover

我有以下查询可以得到我想要的结果:

int associatedId = 123;

MyObject alias = null;

var subQuery = QueryOver.Of<DatabaseView>()
    .Where(view => view.AssociatedId == associatedId)
    .And(view => view.ObjectId == alias.ObjectId)
    .Select(view => view.ObjectId);

var results = session.QueryOver<MyObject>(() => alias)
    .WithSubquery.WhereExists(subQuery)
    .List();

DatabaseView已被映射为实际的 NHibernate 实体(因此我可以将它与 QueryOver 一起使用),但它不与 MyObject 关联。在 HBM 映射中。

此查询返回 IList<MyObject>使用SELECT ... FROM MyObject WHERE EXISTS (subquery for DatabaseView here) 。我如何重写它以返回相同的数据但使用 JOIN 而不是子查询?

最佳答案

在 NHibernate 5.1+ 中,可以通过 Entity Join 进行 QueryOver/Criteria :

int associatedId = 123;

MyObject alias = null;
DatabaseView viewAlias = null;

var results = session.QueryOver<MyObject>(() => alias)
    .JoinEntityAlias(() => viewAlias, () => viewAlias.ObjectId == alias.ObjectId && viewAlias.AssociatedId == associatedId)
    .List();

标准示例:

int associatedId = 123;
var results = session.CreateCriteria<MyObject>("alias")
    .CreateEntityAlias(
            "viewAlias",
            Restrictions.EqProperty("viewAlias.ObjectId", "alias.ObjectId")
            && Restrictions.Eq("viewAlias.AssociationId", associatedId),
            JoinType.InnerJoin,
            typeof(DatabaseView).FullName)
    .List();

关于c# - NHibernate QueryOver : How to join unrelated entities?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378224/

相关文章:

c# - 带有 foreach 的 IndexOutOfRangeException

Android:将多部分文件连接在一起以制作单个文件

mysql - 用于将一列与另一列进行比较的 SQL 查询

php - 动态 MySQL 查询 : Join results from numerous tables

c# - 用于分页到 HQL/Criteria 的 NHibernate SQL 查询

c# - 来自 MemoryStream 的电子邮件附件为空

C# with System.Data.SQLite - 关闭连接

如果集合中的子项具有特定值,则用于选择父项的 nHibernate 标准

nhibernate - Hibernate配置如何创建一个对象

c# - 正确使用 asp.net webforms 生命周期