2009-11-13 60 views
0

我有一個名爲ASB的表和一個名爲PeopleInvolved的表。有一個名爲PeopleInvolved_ASB的聯結表,它只包含一個ASBID和一個PeopleInvolvedID列。這些列充當複合主鍵。實體框架 - 多對多問題

設計師不顯示交接表(如預期的那樣)。我想根據ASBID檢索PeopleInvolved列表。

要檢索的人,我這樣做:

// This top line gets the ASB record from the Case 
var asbRecord = (from c in dd.Case 
         where c.CaseID == caseID 
         select c.ASB).First(); 

     var asbID = asbRecord.Select(asb => asb.ASBID).First(); 

     var people = (from asb in dd.ASB 
         where asb.ASBID == asbID 
         select asb.PeopleInvolved); 

現在,我想要做的就是添加每個PeopleInvolved記錄類型PeopleInvolved的簡單列表。我不能這樣做。我不斷收到:

錯誤4無法將類型「System.Data.Objects.DataClasses.EntityCollection」到「Dynamic.PeopleInvolved」

我怎樣才能得到PeopleInvolved的簡單列表到一個通用的清單,我可以傳回我的控制器?

謝謝,

回答

1

這就是你想要做的?

List<PeopleInvolved> genericPeopleInvolvedList = (from asb in dd.ASB 
          where asb.ASBID == asbID 
          select asb.PeopleInvolved).ToList(); 

[更新時間:回答壞之前]

剛剛意識到asb.PeopleInvolved是集不是單一的實體(該死!)。因此,之前的linq查詢正在返回PeopleInvolved實體的CollectionS。既然你是ASPID選擇應該只有一個fullfill asb.ASBID where子句asb.ASBID == asbID,你可以做如下:

var listWithCollectionOfPeopleInvolved = (from asb in dd.ASB 
           where asb.ASBID == asbID 
           select asb.PeopleInvolved).ToList(); 

List<PeopleInvolved> peopleInvolved = listWithCollectionOfPeopleInvolved.First().ToList(); 

但它的,如果你用它做包含好得多:

var asbInstance = (from asb in dd.ASB.Include("PeopleInvolved") 
         where asb.ASBID == asbID 
         select asb).FirstOrDefault(); 
foreach(PeopleInvolved pi in asbInstance.PeopleInvolved) 
{ 
//do your stuff 
} 

With Include自動加載相關屬性。

+0

這就是我做的,可是後來當我嘗試在foreach: 的foreach(在人PeopleInvolved人) {// 做一些 } 我得到上面提到的轉換錯誤。 – Paul

1

根據您報告的錯誤我猜PeopleInvolved是一個集合。所以,試試這個:

var people = (from asb in dd.ASB 
        where asb.ASBID == asbID 
        from pi in asb.PeopleInvolved 
        select pi).ToList(); 

我認爲這是非常混淆有兩個命名PeopleInvolved一個類型,該類型具有完全相同的名稱的集合。類似地,看起來你有一個叫做ASB的類型和一個實體集,其中包含許多同名的實例,

使實體集名稱複數和類型名稱單數更清晰。

如果我猜錯了類型,請說明ASBDynamic.PeopleInvolveed的佈局。

0
List<PeopleInvolved> = new List<PeopleInvolved>(people);