1

バンドタイトルのリストがあり、BandIDに応じて、それぞれにSelectListを添付したいと思います。

だから最初に私はリストを取得しています:-

List<BandQuestionTitles> bandQuestTitles = viewModel.PopulateBandQuestionTitles();

次に、BandQuestionTitlesにループがあり、SelectListからViewData [var]にデータを入力します:-

foreach (var bandQuestTitleItem in bandQuestTitles)
    {
        //populate the dropdownlist
        string strViewDataString = bandQuestTitleItem.BandQuestTitlesText + "Data";
        ViewData[strViewDataString] = new SelectList(viewModel.bandQuestionList.Where(p => p.BandQuestTitleID == bandQuestTitleItem.BandQuestTitlesID), "BandQuestID", "BandQuestText");
    }

ただし、何らかの理由で、7つのViewData [""]を正しく取得していますが、常に同じSelectListを取得しています。

私がそれをハードコーディングするとき、それはうまくいきます:-

ViewData["PersonalData"] = new SelectList(viewModel.bandQuestionList.Where(p => p.BandQuestTitleID == 1), "BandQuestID", "BandQuestText");
ViewData["BusinessData"] = new SelectList(viewModel.bandQuestionList.Where(p => p.BandQuestTitleID == 2), "BandQuestID", "BandQuestText");

ループで何が間違っているのですか?

あなたの助けと時間をありがとう

4

1 に答える 1

1

LINQが実行されていると思ったときに実行されないという問題のようです。

これを試して:

new SelectList(viewModel.bandQuestionList.Where(p => p.BandQuestTitleID == bandQuestTitleItem.BandQuestTitlesID)**.ToList()**, "BandQuestID", "BandQuestText");

MSからの関連記事:

http://msdn.microsoft.com/en-us/library/bb738633.aspx

一連の値を返すクエリでは、クエリ変数自体がクエリ結果を保持することはなく、クエリコマンドのみを格納します。クエリの実行は、クエリ変数がforeachまたはForEachループで繰り返されるまで延期されます。これは、遅延実行として知られています。つまり、クエリの実行は、クエリが作成された後しばらくしてから発生します。

つまり、クエリが実行されると、bandQuestTitleItem.BandQuestTitlesIDが、すべてのクエリのコレクションの最後(7番目)のIDに割り当てられます。

.ToList()を追加すると、クエリがすぐに実行されます。

于 2012-10-04T13:56:27.620 に答える