【问题标题】:Convert a ColdFusion query to C# query expression将 ColdFusion 查询转换为 C# 查询表达式
【发布时间】: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


【解决方案1】:

如果您可以运行旧系统,启动 SQL Server 分析器并从分析器运行应用程序,您可以捕获发送到数据库的查询。

【讨论】:

  • 这更像是一个评论而不是一个答案。由于您没有足够高的声誉来发布 cmets,因此我为您做到了。删除此答案,您可以免去一些悲伤。
猜你喜欢
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 2011-01-21
  • 2022-01-19
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多