LINQ检查是否存在,但不等于任何值

时间:2018-07-11 08:10:30

标签: c# linq

我尝试从数据库获取数据。我需要按最低位置排列第一个产品的图片网址。操作正在索引视图上运行,该视图每页有20条记录。获取第一个位置的图片网址的代码:

var firstImage = productImageRepository.Get().Where(i => i.ProductId == productId).OrderBy(i => i.Position).First();

在我的数据库中,只有ID为1-7的产品具有图片。当循环出现在ID为8或更高的产品上时,我得到了错误提示:

enter image description here

是否有可能检查数据库中是否存在该产品的图像?我知道我可以将其等于某个值并像if(firstImage!= null)一样对其进行检查,但是我不知道如何在没有相等位置的情况下执行此操作。

2 个答案:

答案 0 :(得分:3)

使用FirstOrDefault(),就像First()一样,不同之处在于,如果没有元素与指定条件匹配,则它返回通用集合的基础类型的默认值。

然后您可以检查是否已定义该值,该值告诉您数据库中是否存在任何项目,如果您的情况是FirstOrDefault()将返回null,如果数据库中不存在图像。

您也可以将Any()First()一起使用

我的解决办法是

var images = productImageRepository.Get().Where(i => i.ProductId == productId).OrderBy(i => i.Position);
if (images.Any()) {
    // could just use First() here now if you wanted 
    // as Any() confirms there is values defined
    return Json(images.FirstOrDefault());
} else {
   // throw a error or something. 
}

答案 1 :(得分:0)

您可以尝试将First()替换为FirstOrDefault()。如果集合中没有项目,则FirstOrDefault()将返回类型的默认值。因此,您感冒然后得到一个布尔值,该布尔值指示找到的第一个元素是否具有图像(假设firstImage的默认值为null,否则可以由default(<Type of firstImage here>)检索):bool imageExists = (firstImage != null);