2013-08-01 10 views
3

我有一個屬性是不是 null(這是一個PK)。但我有一個使用LEFT JOIN在表的查詢,創建空值Linq查詢可能爲null屬性不是

LINQ

(from a in dbContext.TableA 
join b in dbContext.TableB on a.IdB equals b.IdB into bLeft 
from bTbl in bLeft.DefaultIfEmpty() 
select new 
{ 
    IdBTemp = bTbl.IdB, // This value may be null 
    IdATemp = a.IdA 
}.AsEnumerable().Select(row => new DynamicClassModel() 
{ 
    // Stuff here (convertion to string, concatanations and other stuff) 
}); 

* 類模型*

[Key, DatabaseGenerated(DatabaseGeneratedOption.None)] 
[Column("IdB")] 
public long IdB { get; set; } 

的可能性

這只是一個小的查詢例。我的查詢比這個更大,並且還有更多的左連接,還有更多的未映射爲空的字段,但它們在此查詢中可能爲空。


我念叨LET,也試圖與一些值(如0),以填補空值。

如何將空值傳遞給屬性不爲null?

回答

3

你可以嘗試用默認值0來填補它:

(from a in dbContext.TableA 
join b in dbContext.TableB on a.IdB equals b.IdB into bLeft 
from bTbl in bLeft.DefaultIfEmpty() 
select new 
{ 
    IdBTemp = bTbl == null ? 0 : bTbl.IdB, 
    IdATemp = a.IdA 
}.AsEnumerable().Select(row => new DynamicClassModel() 
{ 
    // Stuff here (convertion to string, concatanations and other stuff) 
}); 

也許你想使用一個int?代替。在這種情況下使用:

(from a in dbContext.TableA 
join b in dbContext.TableB on a.IdB equals b.IdB into bLeft 
from bTbl in bLeft.DefaultIfEmpty() 
select new 
{ 
    IdBTemp = bTbl == null ? (int?)null : bTbl.IdB, 
    IdATemp = a.IdA 
}.AsEnumerable().Select(row => new DynamicClassModel() 
{ 
    // Stuff here (convertion to string, concatanations and other stuff) 
}); 
+0

當我嘗試它,我沒有嘗試使用**''* *去嘗試它。 –

+0

這就像一個魅力= D謝謝,並感謝我在SO = P –

2

嘗試指定的默認值,你希望它是:(?INT)bLeft.DefaultIfEmpty(0)bLeft.DefaultIfEmpty(-1)

+0

O.O得到最快的重播好吧,我現在很高興收穫。我不知道有可能這樣做= X也要測試它=) –

+0

這是一個實體不是一個屬性單獨=(我需要聲明一些像'new TableBClass()' –

+1

這完全取決於你想要什麼作爲缺省值,如果沒有的話 或者只是在你選擇的匿名類型中做IdBTemp爲空 –