2013-07-09 2 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> 'to' System.Collections.Generic.ICollection '. Явное преобразование существует (вы пропали без вести броска?)

Я не знаю точно, что вызывает ошибку, так как я выбор UserSiteMapping, связанный с SiteDefinition, и я задаю их к коллекции 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), он должен вернуть все объекты UserSiteMapping, связанные с определенным SiteDefinition? –

+0

Я попробовал SelectMany и Tolist. но это не решило проблему. я получу более вводящую в заблуждение ошибку. «Аргументы типа для метода« System.Linq.Enumerable.SelectMany (System.Collections.Generic.IEnumerable , System.Func >) 'не может быть выведено из использование. Попробуйте явно указать аргументы типа. " –

Смежные вопросы