Проверьте Nullable для объекта insde LinQ в Sql код - PullRequest
0 голосов
/ 10 февраля 2020

Я использую этот пример кода Linq:

from objpath in _context.PathModel
    join objOriginalStation in _context.StationModel 
        on objpath.IdStazioneOrigine equals objOriginalStation.IDStazione
    join objDesttinationStation in _context.StationModel 
        on objpath.IdStazioneDestinazione equals objDesttinationStation.IDStazione
    join objVia1Station in _context.StationModel 
        on objpath.IdVia1 equals objVia1Station.IDStazione
    join objVia2Station in _context.StationModel 
        on objpath.IdVia2 equals objVia2Station.IDStazione
    select new NewPercorsiModel
    {
        IdPercorso = objpath.IdPercorso,
        IdSottorete = objpath.IdSottorete,
        Distanza = objpath.Distanza,
        IdStazioneDestinazione = objpath.IdStazioneDestinazione,
        IdStazioneOrigine = objpath.IdStazioneDestinazione,
        IdVia1 = objpath.IdVia1,
        IdVia2 = objpath.IdVia2,
        Versione = objpath.Versione ?? string.Empty,
        StazioneOrigineName = objOriginalStation.NomeStazione,
        StazioneDestinazioneName = objDesttinationStation.NomeStazione,
        Via1Name = objVia1Station.NomeStazione,
        Via2Name = objVia2Station.NomeStazione ?? string.Empty
    };

Прежде всего, мой вопрос заключается в том, есть ли у меня лучшее решение для улучшения моего кода?

и второй и важный мой вопрос это то, как я могу проверить nullable для моих объектов (например, для objVia2Station), потому что, когда они равны NULL, у меня нет всех моих записей, но у меня также нет ошибок.

1 Ответ

1 голос
/ 10 февраля 2020

Вы можете использовать «DefaultIfEmpty ()» после каждого соединения, как этот код в Entity Framework Вы должны начать получать данные, когда вы сталкиваетесь с другой таблицей. как это:

var query = context.BaseTable.Select(x => new
         {
          x.Id,
          x.field1,
          x.field2,
          ..
          ..
          alias_name= x.ForeignTable== null ? "" : x.ForeignTable.Name
         });
...