0

我是相當新的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不爲空。

回答

0

好像在Malfunctions這個查詢查找沒有元素

Malfunctions.Single(c => c.Id == malfunctionDTO.CustomerId); 

嘗試一些項目

.SingleOrDefault() 
0

單(條件),是一個LINQ擴展方法返回匹配的一個和唯一的元件傳入的條件。 如果沒有匹配條件的元素或匹配的多個元素,則會引發錯誤。 在你的情況下,你的數據庫中沒有與這種情況相匹配的元素。 順便說一句,你可以使用singleOrDefault而不是拋出異常它返回默認值,null。或者也許在單個方法之前,函數沒有包含任何內容,所以它不能迭代任何東西。

+0

SingleOrDefault()返回空值,爲什麼它返回一個空值,如果它在我的表中有一個值? – IlirAs

+0

正如我所說,如果你確定條件是真的,那麼請確保有一個元素(不超過1),否則它將返回null。否則,你應該調試程序,看看有什麼事情,var varunctions在ToList()後面保留一個空列表? –

+0

在數據庫表中,可以有多個具有相同customerId的項目。調試器顯示,var malfunctions不是空它包含_context.Malfunctions – IlirAs