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 或 For Each 循环中被迭代。这称为延迟执行;也就是说,查询执行发生在查询构建后的某个时间。

换句话说,当执行查询时,bandQuestTitleItem.BandQuestTitlesID 将分配给您集合中所有查询的最后一个(第 7 个)ID。

添加 .ToList() 将导致查询立即执行。

于 2012-10-04T13:56:27.620 回答