System.InvalidOperationException当试图从数据库中获取数据
问题描述:
我是相当新的MVC和EF,我试图从我的数据库中显示数据到我的视图。这是我的行动:System.InvalidOperationException当试图从数据库中获取数据
public ActionResult MalfunctionsList(MalfunctionDTO malfunctionDTO)
{
var malfunctions = _context.Malfunctions.ToList();
var customer = _context.Malfunctions.Single(c => c.Id == malfunctionDTO.CustomerId);
var movie = _context.Malfunctions.Where(m => malfunctionDTO.MovieIds.Contains(m.Id)).ToList();
return View(malfunctions);
}
当代码运行,我得到System.InvalidOperationException:序列不包含在此行中没有的元素:
var customer = _context.Malfunctions.Single(c => c.Id == malfunctionDTO.CustomerId);
这是我的DTO:
public class MalfunctionDTO
{
public int CustomerId { get; set; }
public List<int> MovieIds { get; set; }
public Customer Customer { get; set; }
public Movie Movie { get; set; }
public string ReportDescription { get; set; }
}
在我数据库中的表customerId不为空。
答
好像在Malfunctions
这个查询查找没有元素
Malfunctions.Single(c => c.Id == malfunctionDTO.CustomerId);
尝试一些项目
.SingleOrDefault()
答
单(条件),是一个LINQ扩展方法返回匹配的一个和唯一的元件传入的条件。 如果没有匹配条件的元素或与匹配的多个元素,则会引发错误。 在你的情况下,你的数据库中没有与这种情况相匹配的元素。 顺便说一句,你可以使用singleOrDefault而不是抛出异常它返回默认值,null。或者也许在单个方法之前,函数没有包含任何内容,所以它不能迭代任何东西。
SingleOrDefault()返回空值,为什么它返回一个空值,如果它在我的表中有一个值? – IlirAs
正如我所说,如果你确定条件是真的,那么请确保有一个元素(不超过1),否则它将返回null。否则,你应该调试程序,看看有什么事情,var varunctions在ToList()后面保留一个空列表? –
在数据库表中,可以有多个具有相同customerId的项目。调试器显示,var malfunctions不是空它包含_context.Malfunctions – IlirAs