2016-03-08 107 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

相關問題