2013-07-09 53 views
1

我已經defiend我的asp.net mvc的文應用程序內的下列模型類: -無法隱式轉換類型「System.Collections.Generic.IEnumerable <了System.Collections.Generic.ICollection

public class CustomerDetails 
{ 
    public AccountDefinition AccountDefinition {get; set;} 
    public SDOrganization SDOrganization {get; set;} 
    public ICollection<SiteDefinition> SiteDefinition { get; set; } 
    public ICollection<AaaPostalAddress> AaaPostalAddress { get; set; } 
    public ICollection<AaaContactInfo> AaaContactInfo { get; set; } 
    public virtual ICollection<UserSiteMapping> UserSiteMapping { get; set; } 
} 

然後我寫下面的查詢: -

var customerDetails = entities.AccountDefinitions 
    .Where(a => a.ORG_ID == id) 
    .Select(cd => new CustomerDetails 
    { 
     AccountDefinition = cd, 
     SDOrganization = cd.SDOrganization, 
     AaaPostalAddress = cd.SDOrganization.AaaPostalAddresses, 
     AaaContactInfo = cd.SDOrganization.AaaContactInfoes, 
     SiteDefinition = cd.SiteDefinitions, 
     UserSiteMapping = cd.SiteDefinitions.Select(p2 => p2.UserSiteMappings) //this is raising the exception 
    }) 
    .SingleOrDefault(); 

return customerDetails; 

但我得到以下誤導性的錯誤: -

無法隱式轉換類型' System.Collections.Generic.IEnumerable>'到'System.Collections.Generic.ICollection'。一個顯式轉換存在(是否缺少強制轉換?)

我不知道到底是什麼原因造成的錯誤,因爲我選擇相關的SiteDefinition的UserSiteMapping,我到UserSiteMapping集合分配這些(如我的視圖模型中定義的那樣)?

回答

4

使用SelectMany代替:

UserSiteMapping = cd.SiteDefinitions.SelectMany(p2 => p2.UserSiteMappings) 

您可能還需要ToList()ToArray()呼叫切換從IEnumerable<T>ICollection<T>

UserSiteMapping = cd.SiteDefinitions.SelectMany(p2 => p2.UserSiteMappings).ToList() 
+0

非常感謝您的回覆。但爲什麼SelectMany可以解決這個問題? ,因爲在這兩種情況下(使用Select或SelectMany)它應該返回與特定SiteDefinition有關的所有UserSiteMapping對象? –

+0

我試過SelectMany和Tolist。但這並沒有解決問題。我會得到一個更具誤導性的錯誤。 「無法從」System.Linq.Enumerable.SelectMany (System.Collections.Generic.IEnumerable ,System.Func >)「方法的類型參數用法,請嘗試明確指定類型參數。「 –

相關問題