2017-06-23 100 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的长度以确定是否有任何回退。