gpt4 book ai didi

c# - 如何使用子查询作为 NHibernate 中的连接?

转载 作者:行者123 更新时间:2023-11-29 01:53:56 24 4
gpt4 key购买 nike

我有以下 SQL 代码:

SELECT err.*,tmp.counted FROM sm_database.error err
LEFT JOIN (
SELECT sme_Hash, COUNT(*) as counted FROM sm_database.error GROUP BY sme_Hash
) tmp
ON tmp.sme_Hash = err.sme_Hash
WHERE sme_Id = 197

上面会给我一个额外的计数列,它应该设置到我下面的 Count 属性中。

id 197 将是我将在方法中使用的参数。

我的类(class)名字是:

public class Error {

public virtual int Count { get; set; }

public virtual DateTime Date { get; set; }

public virtual int Id { get; set; }

public virtual string Hash { get; set; }

-----------------
//more property's

}

我想使用 Query(或 QueryOver)将其“转换”为 NHibernate

任何人都知道如何正确地执行此操作或可以指出正确的方向吗?

编辑

我得到了它:

 string query = @"SELECT err.* ,tmp.Count 
FROM sm_database.error err
LEFT JOIN (
SELECT sme_Hash as Hash, COUNT(*) as Count FROM sm_database.error GROUP BY sme_Hash
) tmp
ON tmp.Hash = err.sme_Hash
WHERE sme_Id = :id";

var result = session.CreateSQLQuery(query)
.AddEntity(typeof(Error))

.SetParameter("id", id).List<Error>().SingleOrDefault();

它工作正常,除 Count 属性外,所有内容都被拉取。

我的错误类中的 Count 属性未映射,因为我们在数据库中没有列,因为我们在查询中计算了计数。

有没有办法在我的 Error.Count 属性中获取 tmp.Count 值?

提前致谢。

最佳答案

没有简单的答案,也没有针对这种 SQL 构造的内置解决方案。

如何绕过的选项是:

1) 创建特殊实体并将其映射到此 View :"SELECT sme_Hash, COUNT(*) as counted FROM sm_database.error GROUP BY sme_Hash" 它可以是数据库 View 或带有子选择的映射(参见 Mapping native sql to Entity with NHibernate)

2) 通过 CreateSQLQuery 使用原生 SQL

因为 NHibernate 在实体模型之上提供查询。 IE。 FROM 总是来自映射。无法像上面那样创建它

关于c# - 如何使用子查询作为 NHibernate 中的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34198763/

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