2017-01-19 7 views
-1

編集:paulが言及したとおり、私はパラメータ内でそれぞれの可能な値を受け入れるだけです。そのロジックによって、リストに切り替える必要があります。それはnull参照例外を引き起こしますが、私はまだ処理しようとしています。複数のオブジェクトのEnumerable.Singleメソッドの代わりに?

カテゴリ、質問、および回答を持つアンケートビルダーを作成しようとしています。現在、カテゴリ、質問、および回答のデータを更新しようとすると、それぞれの最初のインスタンスのみが更新されます。 .Singleメソッドを使用しているので、問題があると思います。これに代わるリストがリストにありますか?

ここでは、最初のインスタンスのみを更新している2つの例を示します。あなたはSingleだけで、あなたの条件を満足する単一の項目を返し疑わとして、彼らが

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

'Save'メソッドは1つの質問/回答のみを受け取るので、どのように複数のアイテムを更新すると思いますか? – Phil1970

答えて

1

として定義されたビューモデルで

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"); 
} 

複数のアイテムを使用する場合は、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をupposedとして)。 – sovemp

関連する問題