Перевод SQL-запроса с несколькими объединениями в Linq приводит к ошибке исключения null - PullRequest
0 голосов
/ 08 апреля 2019

Я использую Entity Framework (netcore 2.1) для подключения к базе данных и извлечения данных для веб-приложения.

Я заполняю эти переменные, используя данные базы данных следующим образом:

var parkList = await _context.ParkList.ToListAsync();
var forestList = await _context.ForestList.ToListAsync();
var mapList = await _context.MapList.ToListAsync();
var mapCoordinates = await _context.MapCoordinates.ToListAsync();
var groups = await _context.Groups.ToListAsync();

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

Теперь я хочу взять этот SQL-запрос, который работает в моей базе данных, и перевести его на запрос Linq:

select * from parkList pl
    left join forestList fl ON fl.forestID = pl.forestID
    left join mapList ml ON ml.mapID = fl.mapID
    left join mapCoordinates mc ON ml.mapId = mc.mapID
    left join groups g ON mc.groupID = g.groupID

Итак, прочитав некоторые учебные пособия по Linq, я пришел к следующему:

var queryToEventSession = from pl in parkList
    join fl in forestList on pl.ForestId equals fl.ForestId into fls from fl in fls.DefaultIfEmpty()
    join ml in mapList on fl.MapId equals ml.MapId into mls from ml in mls.DefaultIfEmpty()
    join mc in mapCoordinates on ml.MapId equals mc.MapId into mcs from mc in mcs.DefaultIfEmpty()
    join g in groups on mc.GroupId equals q.GroupId into qs from q in qs.DefaultIfEmpty()
    select new EventSession
        { ...populate here ... }

Однако всякий раз, когда я запускаю его, я получаю эту ошибку:

NullReferenceException: ссылка на объект не установлена ​​на экземпляр объект. Park.Scheduler.Scheduling.ScheduleGenerator + <> c.b__2_9 (<> f__AnonymousType1 <<> f__AnonymousType0>, ForestList> <> h__TransparentIdentifier1) в ScheduleGenerator.cs, строка 50

Это ссылка на строку # 50, которая является строкой в ​​приведенном выше коде:

  join ml in mapList on fl.MapId equals ml.MapId into mls from ml in mls.DefaultIfEmpty()

Я не уверен, какая часть нулевая или даже почему она нулевая.

Кто-нибудь может увидеть что-то, что мне не хватает?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...