Dapper QueryAsync не возвращает некоторые строки SQL при использовании UNION ALLC#

Место общения программистов C#
Ответить
Anonymous
 Dapper QueryAsync не возвращает некоторые строки SQL при использовании UNION ALL

Сообщение Anonymous »

Я конвертирую API Visual Basic в .NET 8, используя тот же запрос SQL Server с теми же параметрами, и заметил, что некоторые строки не отображаются в объекте ответа.
В запросе используется UNION ALL, а строки существуют только во втором операторе SELECT:

Код: Выделить всё

SELECT
A.Appointment_Id,
A.Appointment_Date,
C.Client_Id,
C.Name AS Client_Name,
S.Service_Id,
S.Description AS Service_Name,
CO.Name AS Company_Name,
CO.Address AS Company_Address,
'' AS Deleted_By
FROM Appointments A (NOLOCK)
LEFT JOIN Appointment_Services ApS (NOLOCK) ON ApS.Appointment_Id = A.Appointment_Id
LEFT JOIN Services S (NOLOCK) ON S.Service_Id = ApS.Service_Id
LEFT JOIN Clients C (NOLOCK) ON C.Client_Id = A.Client_Id
LEFT JOIN Companies CO (NOLOCK) ON CO.Company_Id = A.Company_Id
LEFT JOIN Users U (NOLOCK) ON U.Id = A.User_Id
WHERE A.Appointment_Date BETWEEN '07/01/2024 00:00:00' AND '07/31/2024 23:59:59'

UNION ALL

SELECT
DA.Appointment_Id,
DA.Appointment_Date,
C.Client_Id,
C.Name AS Client_Name,
S.Service_Id,
S.Description AS Service_Name,
CO.Name AS Company_Name,
CO.Address AS Company_Address,
U.Name AS Deleted_By
FROM Deleted_Appointments DA (NOLOCK)
LEFT JOIN Deleted_Appointment_Services DAS (NOLOCK) ON DAS.Appointment_Id = DA.Appointment_Id
LEFT JOIN Services S (NOLOCK) ON S.Service_Id = DAS.Service_Id
LEFT JOIN Clients C (NOLOCK) ON C.Client_Id = DA.Client_Id
LEFT JOIN Companies CO (NOLOCK) ON CO.Company_Id = DA.Company_Id
LEFT JOIN Users U (NOLOCK) ON U.Id = DA.User_Id
WHERE DA.Appointment_Date BETWEEN '07/01/2024 00:00:00' AND '07/31/2024 23:59:59'
Код C#, использующий QueryAsync Dapper для получения данных:

Код: Выделить всё

public async Task GetAppointments(DateTime startDate, DateTime endDate)
{
var sql = new StringBuilder();
sql.AppendLine(/* the above query */);

using var con = connectionFactory.CreateConnection();
var result = await con.QueryAsync(sql.ToString(), new { startDate, endDate });

return result.ToList();
}
Я пробовал использовать foreach для перебора каждой строки и проверки правильности их возврата, но отсутствующая строка полностью пропускается. Я также пробовал использовать QueryMultipleAsync, но результат остался прежним.
Я сравнил тот же запрос с запросом из Visual Basic API, и они оба отображают его так, как должно при выполнении. в SSMS Microsoft.
Реализация VB также возвращает его правильно.
РЕДАКТИРОВАТЬ: Добавлен полный запрос и параметры C#. для лучшего контекста.

Подробнее здесь: https://stackoverflow.com/questions/788 ... -union-all
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»