我尝试从数据库获取数据。我需要按最低位置排列第一个产品的图片网址。操作正在索引视图上运行,该视图每页有20条记录。获取第一个位置的图片网址的代码:
var firstImage = productImageRepository.Get().Where(i => i.ProductId == productId).OrderBy(i => i.Position).First();
在我的数据库中,只有ID为1-7的产品具有图片。当循环出现在ID为8或更高的产品上时,我得到了错误提示:
是否有可能检查数据库中是否存在该产品的图像?我知道我可以将其等于某个值并像if(firstImage!= null)一样对其进行检查,但是我不知道如何在没有相等位置的情况下执行此操作。
答案 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);