C# 检查对象insde LinQ to Sql代码是否可为Nullable

C# 检查对象insde LinQ to Sql代码是否可为Nullable,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我正在使用以下示例Linq代码: from objpath in _context.PathModel join objOriginalStation in _context.StationModel on objpath.IdStazioneOrigine equals objOriginalStation.IDStazione join objDesttinationStation in _context.StationModel on o

我正在使用以下示例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
    };
首先,我的问题是,我有更好的解决方案来改进我的代码吗


第二个也是很重要的一个问题是,我如何检查我的objects的null值,例如objVia2Station,因为当它们为null时,我没有所有的记录,但也没有任何错误。

您可以在每次连接后使用DefaultIfEmpty,就像下面的代码一样

from objpath in _context.PathModel
join objOriginalStation in _context.StationModel 
    on objpath.IdStazioneOrigine equals objOriginalStation.IDStazione into object1
    from Ob1 in object1.DefaultIfEmpty()
join objDesttinationStation in _context.StationModel 
    on objpath.IdStazioneDestinazione equals objDesttinationStation.IDStazione into object2
    from Ob2 in object2.DefaultIfEmpty()
join objVia1Station in _context.StationModel 
    on objpath.IdVia1 equals objVia1Station.IDStazione into object3
    from Ob3 in object3.DefaultIfEmpty()
join objVia2Station in _context.StationModel 
    on objpath.IdVia2 equals objVia2Station.IDStazione into object4
    from Ob4 in object4.DefaultIfEmpty()
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 = Ob1.Versione  ,
    StazioneOrigineName = objOriginalStation.NomeStazione,
    StazioneDestinazioneName = objDesttinationStation.NomeStazione,
    Via1Name = objVia1Station.NomeStazione,
    Via2Name = Ob4.NomeStazione  
};
这段代码相当于左外连接,但我不喜欢它,因为我们可以在实体框架中使用继承策略 当遇到另一个表时,应该开始接收数据。像这样:

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

同样对于您的建议,我想告诉您,我的情况与您在我的代码中看到的不同。