2016-03-08 106 views
0

我有这样的代码在代码隐藏文件无法转换类型的对象“System.Collections.Generic.HashSet`1 [libraryWebProject.Major]”为类型“libraryWebProject.Major”

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

在这里,我“M使用LINQ查询来获取专业的名单,但是当我尝试遍历它,并显示他们的名字我得到这个错误:

无法投类型的对象System.Collections.Generic.HashSet` 1 [libraryWebProject.Major]'键入'libraryWebProject.Major'。

标题和主要之间的关系是多对多的,我有一个关联表链接标题ID和重大ID

回答

1

这条线:

var sub = la.Titles.Where(t => t.ID == id).Select(t => t.Majors); 

与事实“之间的关系标题和专业是多对多“ 意味着Select的结果是一个集合的集合,所以你的循环将必须是:

foreach (var listOfMajors in sub) 
{ 
    foreach (var major in listOfMajors) 
    { 
     // Do stuff 
    } 
} 

旧的答案被替换后,它显示该问题实际上并没有包含错误的代码。

+0

它现在。谢谢。但我不明白我只选择一个标题,然后选择与之相关的专业。它怎么可能是一个集合的集合? – twobits

0

ToList()尝试使用varforeach

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 + " "; 
     } 
+0

尝试过。仍然是同样的错误。 – twobits

+0

@twobits当我添加var时,你改变'Major'和'var' –

+0

它丢失了循环内MajorName的定义 – twobits

相关问题