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?
You can use the 'ProjectTo' method instead.
Optionally you pass the ConfigurationProvider from any injected Mapper instance, as necessary.
You need to be aware of the fact that by creating your mapping in such a way:
Only these basic generic collection types are supported implicitly:
But not
IQueryable<T>
. That's why you get the exception.Therefore you should try doing sth like this:
In addition to what bejger said you can also use the QueryableExtensions namespace in Automapper to map IQueryable objects, but it puts some limitations on what setup you can do between two object when you do your
CreateMap<TSource, TDest>
instead of using it like
you instead use it like