我已经为此查看了stackoverflow,但找不到我正在寻找的答案,真的很简单。基本上我想知道如何检查我的IEnumerable变量是否为null,我的if语句只是嘲笑我并让变量通过。
这是一个场景,我有一个从数据库中提取的数据列表,这个小位是一个过滤功能(所以没有[HttpPost])根据用户输入过滤内容。它检查的第一件事是评论数据库中的评论列表,如果返回为空,我希望它检查评论数据库中的用户列表。
这是代码:
var review = from m in _db.Reviews
select m;
if (!String.IsNullOrEmpty(searchString))
{
review = review.Where(s => s.review.Contains(searchString));
if (review != null && review.Any())
{
return View(review);
}
else
{
review = review.Where(s => s.user.Contains(searchString));
return View(review);
}
我已经搞砸了一下,if语句用于检查它是否为null,然后.any(),然后!= null现在两者,变量只是继续,笑着它。我运行调试器并把它放在几个点上。当我输入一个我知道不会返回结果的值时,这就是调试器所说的审查值是:
“IEnumerable没有产生任何结果”
为了防止这种情况的可怜尝试,我甚至在if语句中删除了这句话。变量笑得那么厉害我发誓,我可以通过我的扬声器听到它。
无论如何,如果我能得到最好的方法,为什么呢?会有饼干。
答案 0 :(得分:7)
问题在于,当你这样说:
review = review.Where(s => s.user.Contains(searchString));
...您没有修改原始查询:
var review = from m in _db.Reviews
select m;
而是你在这里创建的那个:
review = review.Where(s => s.review.Contains(searchString));
如此有效地说:
如果查询没有任何结果,请为其添加其他条件。
这显然不会产生任何结果。
请改为尝试:
if (!String.IsNullOrEmpty(searchString))
{
var reviewMatches = _db.Reviews.Where(s => s.review.Contains(searchString));
if (reviewMatches.Any())
{
return View(reviewMatches);
}
else
{
var userMatches = _db.Reviews.Where(s => s.user.Contains(searchString));
return View(userMatches);
}
请注意,您声明变量的方式,它们不可能是null
,因此您只需要担心它们是否为空。
答案 1 :(得分:0)
尝试使用if条件:
var review = from m in _db.Reviews
select m;
if (!String.IsNullOrEmpty(searchString))
{
review = review.Where(s => s.review.Contains(searchString));
if (review.count() != 0 && review.Any())
{
return View(review);
}
else
{
review = review.Where(s => s.user.Contains(searchString));
return View(review);
}
return null;
}