How to resolve - unable to cast Generic.List to Linq.IQueryable using Automapper?

automapper, c#, entity-framework, generics

Solution

You need to be aware of the fact that by creating your mapping in such a way:

Mapper.CreateMap<ContentType, Project.Core.UI.Models.ContentTypes>();

Only these basic generic collection types are supported implicitly:

IEnumerable
IEnumerable<T>
ICollection
ICollection<T>
IList
IList<T>
List<T>
Arrays

But not `IQueryable<T>`. That's why you get the exception.

Therefore you should try doing sth like this:

var dto = Mapper.Map
         <IEnumerable<ContentType>, 
          IEnumerable<ContentTypes>>(result.AsEnumerable()); 
// or e.g. List/List/ToList()

Problem

I'm getting the following error in using a DTO and EF model: Unable to cast object of type 'System.Collections.Generic.List`1[Project.Core.UI.Models.ContentTypes]' to type 'System.Linq.IQueryable`1[Project.Core.UI.Models.ContentTypes] Bootstrapped: `Mapper.CreateMap<ContentType, Project.Core.UI.Models.ContentTypes>();` In an OData controller method `public IQueryable<ContentTypes> Get() {...}`, using: ``` var result = Mapper.Map<IQueryable<ContentType>, IQueryable<ContentTypes>>(_repository.Query().Get() .Where(u => u.UserId == userId) .OrderBy(o => o.Description)); ``` I have also tried the following but I suspect that this is exactly what the above is as well: ``` var result =_repository.Query().Get() .Where(u => u.UserId == userId) .OrderBy(o => o.Description); var dto = Mapper.Map<IQueryable<ContentType>, IQueryable<ContentTypes>>(result); return dto; ``` How can I create the appropriate mapping for this?

Original source