gpt4 book ai didi

sql-server - NHibernate 中的 STUFF SQL 查询,基本上是试图复制 MySQLGroupConcat

转载 作者:行者123 更新时间:2023-12-04 16:47:56 24 4
gpt4 key购买 nike

关于我正在努力完成的事情的快速信息。我有一些历史表,并且正在将每个历史项的数据连接到一行中。我遇到的问题是试图在 NHibernate 中复制 STUFF(query,1,1,'')。我已经设置好所有关系并正常工作,并且仅使用连接的查询工作正常,只是无法弄清楚如何通过查询来实现 STUFF。

这是整个查询:

SELECT h.*, u.FirstName, u.LastName, eh.*,
STUFF((
SELECT CONCAT(c.Name, ' - ')
FROM SubHistory sh
LEFT JOIN Cust c ON c.CustID = sh.SubCustId
WHERE h.Id = sh.HistoryId
FOR XML PATH ('')), 1, 1, ''
) AS Subs
FROM History h
LEFT JOIN EmailHistory eh ON eh.HistoryId = h.Id
LEFT JOIN Usr u ON u.UsrID = h.UserId

我需要的结果是(列):

H.ID - H.ReportID - H.UserID - (Concatenated Subs) - u.FirstName - u.LastName - eh.Email

我可以像这样在 Nhibernate 中不使用 STUFF 来做到这一点:

IList<History> hist = session.QueryOver<History>(() => historyAlias)
.Left.JoinAlias(() => historyAlias.User, () => usrAlias)
.Left.JoinAlias(() => historyAlias.Email, () => emailAlias)
.List();

我按照这里的教程 http://blog.andrewawhitaker.com/blog/2014/08/15/queryover-series-part-7-using-sql-functions/用于创建 STUFF 函数,但我不认为它是按照我想要的方式使用它的想法创建的,而且我无法成功地使其工作。

那么,我的问题可以以及如何按照我想要的方式实现 STUFF?还是有更好的方法来获取我想要的信息?

引用数据库示例:

历史表

ID - ReportID - Name - UserID

子历史表 - (可以很多)

ID - HistoryID - SubInfo

用户表

ID - FirstName - LastName

客户表

ID - CustInfo

EmailHistory 表 - (只能有一个)

ID - HistoryID - Email

最佳答案

我想经过足够多的修补,您最终可以让它与调用 STUFF 的 NHibernate 一起工作,但这可能需要很长时间。可能有一个更快/更简单的解决方案:创建一个名为 HistoryView 的 View ,它基本上执行您在顶部的查询。然后,创建一个新的 C# 类,也称为 HistoryView,它具有与 View 的列相对应的属性。这些 HistoryView 对象将是只读的,但它将实现您所追求的目标。

关于sql-server - NHibernate 中的 STUFF SQL 查询,基本上是试图复制 MySQLGroupConcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36103788/

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