LINQ запросы в базе данных поездов - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть база данных поездов со всеми необходимыми полями, такими как Поезд, Маршрут, Станция, Пассажир, Резервирование и т. Д. Я хочу получать поезда между парой станций с помощью LINQ (я знаю SQL-запрос, но не могупреобразовать его в LINQ).Пожалуйста, кто-нибудь, помогите мне.

Еще одна вещь, я хочу метод расширения подход LINQ Queries (, а не такие ключевые слова, как from, in, выберите ), например,

var trains = _context.Trains.FirstOrDefault(a => a.Id == text);

SQL-запрос

SELECT Route.TrainId, Train.TrainName 
FROM Route 
INNER JOIN Train ON Route.TrainId=Train.TrainId 
WHERE 
    (Route.StationId IN 
        (SELECT Source.StationId 
         FROM Route AS Source 
         INNER JOIN Route AS Destination ON Source.TrainId=Destination.TrainId 
         WHERE 
             (Source.StopNumber - Destination.StopNumber < 0) 
              AND 
             (Source.StationId = @Source) 
              AND
             (Destination.StationId = @Destination)
         )
     )

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

1 Ответ

0 голосов
/ 02 декабря 2018

Я использовал классы для моделирования вашей базы данных.Попробуйте что-то вроде этого

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Train> trains = new List<Train>();
            string source = "abc";
            string destination = "xyz";


            var results = trains.Where(x => x.Routes.Any(y => y.StationId == source) && x.Routes.Any(y => y.StationId == destination))
                .Select(x => new {
                    source = x.Routes.Where(y => y.StationId == source).FirstOrDefault(),
                    destination = x.Routes.Where(y => y.StationId == destination).FirstOrDefault()
                })
                .Where(x => x.destination.StopNumber > x.source.StopNumber)
                .ToList();
        }
    }
    public class Train
    {
        public string TrainName { get; set; }
        public List<Route> Routes { get; set; }
    }
    public class Route
    {
        public string TrainId { get; set; }
        public string StationId { get; set; }
        public int StopNumber { get; set; }
    }
}
...