【发布时间】:2019-12-10 18:22:08
【问题描述】:
我正在将旧的 Cold Fusion 应用程序转换为 ASP.NET Core。该应用程序是数据密集型的,Cold Fusion 代码使用嵌入式 SQL 查询。我需要将几个 Cold Fusion 查询转换为 .NET 查询表达式。例如,以下是典型的 Cold Fusion 查询:
SELECT
s2.CriteriaID, s2.Response, s2.NA, s2.Status, s2.resubStatus, s2.staffDetermination, s2.resubStaffDetermination,
c.CriteriaDesc<cfif getAgency.agencyType NEQ "N">Short</cfif> criteriaDesc, ' ' long_desc
FROM tblASLStep2 s2
left outer join tblTableOfContentCriteria c on c.CriteriaNo = s2.criteriaID and c.meetingID = s2.meetingDate
where
s2.AgencyID = #session.AgencyID#
and s2.MeetingDate=#session.MeetingDate#
and (
(s2.response is not null and ltrim(cast(s2.response as nvarchar)) <> '')
or exists (
SELECT 1
FROM tblASLStep2_narratives n
WHERE
n.AgencyID = '#session.AgencyID#'
and n.CriteriaID = s2.criteriaID
and n.MeetingDate = #session.MeetingDate#
and n.narrativeType = 'R'
and n.response is not null
)
)
<cfif session.agencyType neq "F">
order by replace(replace(s2.CriteriaID, 'ix', 'viiii'), 'Agency Narrative', 1)
<cfelse>
and s2.criteriaID not like 'SEC5%'
union all
</cfif>
我可以到达'from' 和 SELECT,但是 LEFT OUTER JOIN 和条件语句部分让我陷入了循环。假设表和所有其他变量都存在,将其转换为 .NET 查询表达式的最佳方法是什么?
【问题讨论】:
-
你不能这样做。您必须知道自己在做什么,然后才能从中形成查询。无法将 SQL 转换为 EF。 Ef 将形成 SQL - 但不是以您想要的方式,只是以有效的方式。所以你必须知道你想做什么。从定义您的类和表 (DBSet) 开始,然后我们再谈。
-
就像我说的,所有的表和变量都已经定义并存在。例如,表 tblASLStep2 已经是一个 DbSet。与表 tblTableOfContentCriteria 和表 tblASLStep2_narratives 一样。
-
也许我的SQL to LINQ Recipe 可以帮助你开始。也有商业翻译产品可用。如果您仍然对特定查询有疑问,您可以发布特定问题。如前所述,使用 EF 而不是 LINQ to SQL 将涉及更多的转换和理解。 PS 您的查询帖子显示不完整(不能以
union all结尾)。 -
最后的条件部分看起来有问题。如果 session.agencyType 为“F”,则命令将以
union all结尾。当你把它翻译成 .net 时,你可能想看看那个。 -
来自 James Njoroge,“如果您可以运行旧系统、启动 SQL Server 分析器并从分析器运行应用程序,您就可以捕获发送到数据库的查询。”
标签: c# sql asp.net-core coldfusion query-expressions