2017-01-19 20 views
-1

編輯:由於保羅提到我只接受參數中每個可能的值。所以通過這個邏輯他們應該切換到列表。這會導致一個空引用異常,儘管我仍然試圖通過。Enumerable.Single方法適用於多個對象嗎?

我正在嘗試創建具有類別,問題和答案的調查生成器。目前,當我嘗試更新類別,問題和答案的數據時,它僅更新每個類別的第一個實例。我相信問題是因爲我正在使用.Single方法。有沒有替代這個用於列表?

以下是僅更新第一個實例的兩個示例。

public ActionResult Save(Survey survey, List<Category> category, List<Question> question, List<Answer> answer) 
{ 
    //var categoryInDb = _context.Categories.Single(m => m.CategoryId == category.CategoryId); 
      //categoryInDb.CategoryDescription = category.CategoryDescription; 

    //Updated loop. 
     foreach (var categorytoAdd in category) 
      { 
       foreach (var categoryInDb in _context.Categories.Where(m => m.CategoryId == categorytoAdd.CategoryId)) 
        categoryInDb.CategoryDescription = categorytoAdd.CategoryDescription; 
      } 

    var questionInDb = _context.Questions.Single(m => m.QuestionId == question.QuestionId); 
      questionInDb.QuestionText = question.QuestionText; 

    _context.SaveChanges(); 
    return RedirectToAction("Index", "Surveys"); 
} 
在視圖模型

當你懷疑Single只返回滿足您的條件的單個項目,他們被定義爲

public List<Category> Categories { get; set; } 
    public List<Question> Questions { get; set; } 
+0

由於'Save'方法只收到一個問題/答案,您會如何期望它更新多個項目? – Phil1970

回答

1

。如果您想多個項目使用Where(當然返回IEnumerable)。因爲它現在是一個集合,所以你必須通過foreach來改變/訪問/使用項目。

這樣:

foreach (var categoryInDb in _context.Categories.Where(m => m.CategoryId == category.CategoryId)) 
    categoryInDb.CategoryDescription = category.CategoryDescription; 

作爲sovemp注意到,你是Single實際上將拋出,如果你有一個以上的記錄下手;因此,除非您修復了總體查詢以便返回多個結果,否則這將不會執行任何操作。

+0

謝謝你的回答。這就是我一直在尋找的。不幸的是,我的數據仍然沒有更新任何東西,但第一個實例,所以我猜這個問題在別的地方。 – Nick

+0

你有多個具有相同ID的類別? –

+0

這就是我想知道的。你(看起來)只查詢每個項目的1個項目,即每個對象的id。此外,如果您的linq查詢存在多個條目,Single會拋出一個錯誤(與First相同)。 – sovemp

相關問題