[英]Check Nullable for object insde LinQ to Sql code
我正在使用這個示例 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
};
首先我的問題是,我有更好的解決方案來改進我的代碼嗎?
第二個也是重要的我的問題是,我如何檢查我的對象(例如 objVia2Station)是否可以為空,因為當它們為空時,我沒有所有記錄,但我也沒有任何錯誤。
您可以在每次加入后使用“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
};
這段代碼相當於“Left Outer Join”,但我不喜歡它,因為我們可以在實體框架中使用繼承策略當你遇到另一個表時應該開始接收數據。 像這樣:
var query = context.BaseTable.Select(x => new
{
x.Id,
x.field1,
x.field2,
..
..
alias_name= x.ForeignTable== null ? "" : x.ForeignTable.Name
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.