2017-06-23 84 views
0

我的IF聲明無法按預期工作,它正在擾亂我的大時間。我不確定我做錯了什麼。請問有人可以解釋一下嗎?IF聲明不能按預期工作

var _getData = db.EventTable.Where(x => x.EventID == id && x.Town == town).ToList(); 

if (_getData != null) 
{ 
    foreach (var e in _getData) 
    { 
     // some logic here to update the event etc 
    }       
} 
else 
{ 
    // some logic to create an event 
} 

我的代碼永遠不會打else塊當_getData是空的,我不知道這是爲什麼。我需要它來擊中else塊,以便在數據庫中創建一個事件。

我在做什麼錯?

謝謝

+0

你嘗試,進行調試,到剛剛成立_getData直接空?因爲除非這不起作用,否則它意味着_getData不會爲空。 – Kilazur

+6

而不是測試'null',你應該測試*列表是否爲空*。 –

+0

'_getData'可以爲'null',但'ToList()'可以返回一個*空*列表 –

回答

5

ToList()不能返回null列表:

if (_getData.Any()) 
{ 
    foreach (var e in _getData) 
    { 
    // some logic here to update the event etc 
    } 
} 
else 
{ 
    // some logic to create an event 
} 
+0

謝謝..現在我明白了 – 1future

+0

@Rawling:'.ToList()'實現結果,這就是爲什麼'.Any()'是安全的 –

2

即使有符合條件的任何行,將返回沒有條目列表。

解決方案:

if(_getData.Any()) 
{ 
    ... 

爲了防止今後發生類似的錯誤,我強烈建議命名變量是這樣的:

var townEventsList = db.EventTable.Where(x => x.EventID == id && x.Town == town).ToList(); 

if (townEventsList.Any()) 
{ 
    foreach (var townEvent in townEventsList) 
    { 
1

既然你調用ToList(),它會創建一個列表是被存儲在你的_getData變量中。

試圖通過對項目的存在在這個列表檢查:

if (_getData.Any()) 
{ 
} 
1

因爲_getData永遠不會爲NULL。如果沒有找到數據,實體框架不返回NULL。它將始終返回一個列表,即使有ZERO項目。

您應該檢查_eventData的長度以確定是否有任何回退。