Как запросить в базе данных Entity Framework записи между двумя датами, а затем вернуть эту информацию для отображения на экране - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть приложение Entity MVC с базой данных с кодом.Мне нужно создать окно поиска для поиска между двумя датами и вернуть записи между этими датами.Я вызову метод с помощью jQuery / ajax и выведу результаты в таблицу.

Я попытался написать API, но безуспешно.Я даже не уверен, что это правильный путь?

namespace Areometrex_Leaflet.Models
{
    [Table ("Flight_Lines")]
    public class Flight_line
    {
        [Key]
        public string Swath_name { get; set; }
        public string Flight_name { get; set; } 
        public string Swath_record { get; set; }
        public string Flight_date { get; set; }
        public decimal Start_lat { get; set; }
        public decimal Start_long { get; set; }
        public decimal End_lat { get; set; }
        public decimal End_long { get; set; }
        public decimal Altitude { get; set; }
        public DateTime Time_start { get; set; }
        public DateTime Time_end { get; set; }
        public string Sensor { get; set; }
    }

    public class FlightLineContext : DbContext
    {
        public DbSet<Flight_line> Flight_Lines { get; set; }
    }
} 

Это моя модель, которая хранит объекты в базе данных.Мне нужно найти свойство «Flight_date», которое хранится в моей БД в следующем формате как «nvarchar»:

17/11/2018 11:09:18 PM

Мой текущий API выглядит примерно так:

[HttpPost]
public IEnumerable<Flight_line> SearchFlight_Line()
{
    string start, end;

    var rc = RequestContext;
    var data = rc.Url.Request.GetQueryNameValuePairs();
    {
        start = data.FirstOrDefault().Value ?? string.Empty;
        end = data.LastOrDefault().Value ?? string.Empty;
    }
    //db format: 17/11/2018 11:22:56 PM
    var s = DateTime.Parse(start);
    var flightSearch = new List<Flight_line>();

    using (_context)
    {
        var sql = $"SELECT * FROM Flight_Lines WHERE Flight_Date BETWEEN '{start}' AND '{end}'";
        flightSearch = _context.Flight_Lines.SqlQuery(sql).ToList<Flight_line>();
    }
    return flightSearch;
}

В идеале я хочу вызвать этот API с помощью jquery / Ajax и вернуть результаты, которые будут отображены в виде MVC.Я предполагаю, что это очень просто, но я только учусь и у меня заканчиваются идеи.Я бы подумал, что это действительно просто, но я изо всех сил пытаюсь найти ответы, которые я ищу в Интернете, что наводит меня на мысль, что, возможно, я делаю это неправильно?

1 Ответ

3 голосов
/ 15 апреля 2019

Прежде всего, не сохраняйте даты в виде строки в вашей базе данных, у вас просто будут проблемы позже.

Вместо:

public string Flight_date { get; set; }

Установите его как DateTime:

public DateTime Flight_date { get; set; }

Что касается запроса на поиск рейсов, вы можете попробовать это.Это вернет список объектов «Flight_line», которые вы можете затем вернуть, где вам нужно.

DateTime start = DateTime.Now;
DateTime end = DateTime.Now.AddDays(7);

var flights = _context.Flight_line.Where(f => f.Flight_date >= start && f.Flight_date <= end).ToList();
...