How to resolve - is it impossible to use Generic.List for Linq.IQueryable using Automapper?

I get the following error when using the DTO and EF model:

Unable to start an object of type "System.Collections.Generic.List 1[Project.Core.UI.Models.ContentTypes]' to type 'System.Linq.IQueryable1 [Project.Core.UI.Models.ContentTypes]

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

In the 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 also tried the following, but I suspect that this is exactly what is stated above:

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 an appropriate mapping for this?

+3
source share
2 answers

You need to know that by creating your mapping this way:

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

Only these basic collection types are supported implicitly:

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

But not IQueryable<T>. That is why you get an exception.

:

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

, bejger, QueryableExtensions Automapper IQueryable, , , CreateMap<TSource, TDest>

,

IQueryable<ContentTypes> dto = Mapper.Map<IQueryable<ContentType>, IQueryable<ContentTypes>>(result);

IQueryable<ContentTypes> dto = result.Project().To<ContentTypes>();
+2

All Articles