我在代码隐藏文件
中有这段代码LibraryArticlesEntities la = new LibraryArticlesEntities();
int id = 17;
if (Request.QueryString["TitleID"] != null)
{
id = Int32.Parse(Request.QueryString["TitleID"]);
}
var gettitle = la.Titles.Where(t => t.ID == id).Select(t => t.Title1);
header.InnerHtml += gettitle;
var sub = la.Titles.Where(t => t.ID == id).Select(t => t.Majors);
foreach (Major major in sub) // the error is here
{
subject.InnerHtml += major.MajorName + " ";
}
这里我使用LINQ查询来获取专业列表,但是当我尝试迭代它并显示它们的名字时,我收到了这个错误:
无法将类型为'System.Collections.Generic.HashSet`1 [libraryWebProject.Major]'的对象强制转换为'libraryWebProject.Major'。
Title和Major之间的关系是多对多的,我有一个关联标题ID和主要ID
的关联表答案 0 :(得分:1)
这一行:
var sub = la.Titles.Where(t => t.ID == id).Select(t => t.Majors);
以及“Title和Major之间的关系是多对多”的事实
意味着Select
的结果是集合的集合,因此您的循环必须是:
foreach (var listOfMajors in sub)
{
foreach (var major in listOfMajors)
{
// Do stuff
}
}
在发现该问题实际上并未包含错误的代码后,旧答案被替换。
答案 1 :(得分:0)
请尝试使用ToList()
并使用var
中的foreach
:
var sub = la.Titles.Where(t => t.ID == id)
.Include(t => t.Majors)
.Select(t => t.Majors).ToList();//use tolist() here
foreach (var major in sub) // and add var here please
{
subject.InnerHtml += major.MajorName + " ";
}
答案 2 :(得分:0)
请尝试sub
是List<Major>
var sub = la.Titles.Where(t => t.ID > 0)
.SelectMany(a => a.Majors.Select(b=>b)).ToList();