我有一个乐队标题列表,我希望根据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");
我在循环中做错了什么?
感谢您的帮助和时间
答案 0 :(得分: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()将导致查询立即执行。