Преобразование запроса ColdFusion в выражение запроса C#

Я конвертирую устаревшее приложение 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?


person JNickVA1    schedule 10.12.2019    source источник
comment
Вы не можете сделать это таким образом. Вы должны знать, что вы делаете, и затем вы можете сформировать запрос из этого. Невозможно преобразовать SQL в EF. Ef сформирует SQL — но не так, как вы хотите, а именно так, как это работает. Так что вы должны знать, что вы хотите сделать. Начните с определения ваших классов и таблиц (DBSet), а затем мы поговорим снова.   -  person Holger    schedule 10.12.2019
comment
Как я уже сказал, все таблицы и переменные уже определены и существуют. Например, таблица tblASLStep2 уже является DbSet. Как и таблица tblTableOfContentCriteria и таблица tblASLStep2_narratives.   -  person JNickVA1    schedule 10.12.2019
comment
Возможно, мой SQL to LINQ Recipe может помочь вам начать. Существуют также коммерческие переводческие продукты. Если у вас все еще есть проблемы с определенными запросами, вы можете опубликовать конкретный вопрос. Как уже упоминалось, использование EF вместо LINQ to SQL потребует большего преобразования и понимания. PS Ваше сообщение с запросом выглядит неполным (не может заканчиваться на union all).   -  person NetMage    schedule 10.12.2019
comment
Условная часть в конце выглядит глючной. Если session.agencyType имеет значение F, команда будет заканчиваться на union all. Когда вы будете переводить это на .net, вы, возможно, захотите взглянуть на это.   -  person Dan Bracuk    schedule 10.12.2019
comment
От Джеймса Ньороге, если вы можете запустить устаревшую систему, запустить профилировщик SQL Server и запустить приложение из профилировщика, вы можете захватывать запросы, которые отправляются в базу данных.   -  person Dan Bracuk    schedule 11.12.2019


Ответы (1)


если вы можете запустить устаревшую систему, запустить профилировщик SQL Server и запустить приложение из профилировщика, вы можете перехватывать запросы, которые отправляются в базу данных.

person James Njoroge    schedule 11.12.2019
comment
Это скорее комментарий, чем ответ. Поскольку у вас недостаточно высокая репутация, чтобы оставлять комментарии, я сделал это за вас. Вы можете избавить себя от горя, удалив этот ответ. - person Dan Bracuk; 11.12.2019