Как добавить ПРИВЕДЕНИЕ в необработанном SQL в Entity Framework в .NET Core

#sql #sql-server #entity-framework-core #ef-core-3.1

#sql #sql-сервер #entity-framework-core #ef-core-3.1

Вопрос:

У меня есть веб-приложение, написанное на .NET Core, и у меня есть метод post, который получает параметр и выполняет запрос к базе данных.

 public IActionResult OnPostGetRegestrationList(string objId)
{       
    List<Flight> data = _context.Flight.FromSqlRaw("select id, side, reg, CAST(Actual_Date as date)as ActDate , CAST(Actual_Time as time)as ActTime from Flight where REG = {0} order by reg, ActDate, ActTime", objId).ToList();
    return new JsonResult(data);
}
 

Запрос будет работать, если приведения нет, но я должен выполнить приведение, чтобы я мог получить время в этом формате ’12:49: 00.0000000′ вместо этого формата ‘31.12.1899 12:49: 00 PM’, что совершенно неверно, потому что дата генерируется автоматически и выдает неверную.

Как добавить CAST в SQL raw в Entity Framework, и даст ли добавление его в order тот же результат (добавление ПРИВЕДЕНИЯ в order работает)? вот рабочий запрос, но это не то, что я хочу.

  List<Flight> data = _context.Flight.FromSqlRaw("select id, side, reg, Actual_Date , Actual_Time from Flight where REG = {0} order by reg, CAST(Actual_Date as date), CAST(Actual_Time as time)", objId).ToList();
 

Это класс полета

 public class Flight
{
   [Key]
    public Int64 id { get; set; }
    public string REG { get; set; }
    public string Side { get; set; }
    public string Actual_Date { get; set; }
    public string Actual_Time { get; set; }
  
}
 

Класс в БД

 CREATE TABLE [dbo].[Flight](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[REG] [nvarchar](max) NULL,
[Side] [nvarchar](max) NULL,
[Actual_Date] [nvarchar](max) NULL,
[Actual_Time] [nvarchar](max) NULL,
CONSTRAINT [PK_Flight] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)
 

Комментарии:

1. Какую СУБД вы используете? (Когда дело доходит до даты / времени, многие продукты далеки от ANSI SQL совместимый.)

2. Я использую sql 2019 @jarlh

3. Зачем использовать необработанный SQL для такой простой вещи, которая может быть легко предоставлена ORM и LINQ? Все, что вам нужно, это правильное сопоставление типов данных. Какой тип Actual_Date Actual_Time столбцов и в базе данных? Каков тип соответствующих свойств в Flight классе?

4. приведение как time(7)?

5. Пожалуйста, отредактируйте свой вопрос, чтобы включить определение Flight класса и определение Flight таблицы. В .NET нет чистого типа даты (это DateTime), и ближайшая вещь к типу времени, который у него есть, — это TimeSpan.