2016-03-09 52 views
1

控制器中的操作方法接收一个值,就像几个字母一样。代码检查表中是否包含这些字母。我使用这个代码,这个任务:检查对数据库的查询是否为空

var result = db.People.Where(b => b.Name.ToUpper().Contains(filter.ToUpper())); 

但我怎么能检查result变量为空或空,当没有任何匹配的信吗?我测试了这个,但它不起作用!

If(result == ""){ 
// Do something 
} 

我想使用Viewbag发送一条消息,指出没有匹配,或者在视图中执行此检查。我在一些AJAX和部分视图中使用了它,并且它工作的很完美,但是如果没有任何匹配,我只想显示一条消息。检查result值为空还是为空的最佳方法是什么?

+0

是什么结果类型? – Haris

+0

'if(result!= null){// all good' –

+0

提示:检查['IEnumerable.Where ']的返回值类型(https://msdn.microsoft.com/zh-cn/library/bb549418的.aspx)。 – Albireo

回答

2

的最简单的方法是通过使用!result.Any()

var result = db.People.Where(b => b.Name.ToUpper().Contains(filter.ToUpper())); 

If(!result.Any()){ 
    // Do something 
} 

从MSDN上IEnumerable

任何()

确定序列是否包含任何元素。

完全符合您的需求。

+1

这是所有我认为最好的答案,因为它通过一个简单的解决方案来回答问题,提供参考资料,并预期使用某项功能 - 其他解决方案需要额外的工作。 +1 –

1

试试这个,使用FirstOrDefault它会给你的结果的第一条记录,否则,如果没有结果从它返回默认值是null查询得到,

var result = db.People.Where(b => b.Name.ToUpper().Contains(filter.ToUpper())).FirstOrDefault(); 

    If(result == null){ 
    // Do something 
    } 

或者,如果你想使用这个结果,操纵你的代码中的东西,然后你可以使用ToList()。这将返回列表值,如果查询didnt产生什么则列表计数为0。

var result = db.People.Where(b => b.Name.ToUpper().Contains(filter.ToUpper())).ToList(); 

If(result.Count == 0){ 
    // Do something 
} 
1

您的代码不工作,因为代码返回一个对象而不是字符串,如果你想返回字符串,那么你必须使用“选择”子句来选择一个特定的字段,如果你想检入相同的代码,然后修改:

var result = db.People.Where(b => b.Name 。.ToUpper()包含(filter.ToUpper()))ToList(); 如果(结果!= NULL & & result.Count> 0)

它会为你工作。

1

对于IEnumerable的,我们可以用任何(),您的代码将可以写成

if(!db.People.Where(b => b.Name.ToUpper().Contains(filter.ToUpper())).Any() { 
// do some thing 
}