无法将类型为'System.Collections.Generic.HashSet`1 [libraryWebProject.Major]'的对象强制转换为'libraryWebProject.Major'

时间:2016-03-08 08:58:05

标签: linq casting

我在代码隐藏文件

中有这段代码
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

的关联表

3 个答案:

答案 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)

请尝试subList<Major>

var sub = la.Titles.Where(t => t.ID > 0)
                   .SelectMany(a => a.Majors.Select(b=>b)).ToList();