IEnumerable检查它是否为空
本文关键字:是否 检查 IEnumerable | 更新日期: 2023-09-27 18:02:53
我在stackoverflow上找过这个,但找不到我要找的答案,真的很简单。基本上,我想知道如何检查我的IEnumerable变量是否为空,我的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 not yield any results"
为了防止这种情况,我甚至把这句话扔进了if语句中。变量笑得那么厉害,我发誓我可以通过扬声器听到它。
不管怎样,伙计们,如果我能得到最好的方法来做到这一点,为什么。会有饼干的
问题是当你说:
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
,所以你只需要担心它们是否为空。
尝试使用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;
}