LINQ and AutoMapper

automapper c# entity-framework linq

Question

I'm wondering if there is anything I can do to get this working as expected. This works fine in my code:

        var roles = _securityContext.Set<Role>();
        var roleList = new List<RoleDto>();
        foreach (var role in roles)
        {
            roleList.Add(Mapper.Map<Role, RoleDto>(role)); 
        }

        return roleList;

But changing this to:

        var roles = _securityContext.Set<Role>();

        return roles.Select(role => Mapper.Map<Role, RoleDto>(role)).ToList();

Results in an error I've not seen before:

"LINQ to Entities does not recognize the method 'Security.Dto.RoleDto MapRole,RoleDto' method, and this method cannot be translated into a store expression"

I'm not sure if I can even do anything about this'problem' ... arguably the method that works is more readable anyway ...

1
14
2/8/2013 10:53:45 AM

Accepted Answer

You're operating on IQueryable, which tries to translate the method you supply into SQL. Obviously, it's not going to happen, as you're passing AutoMapper related magic. There's an easy solution, you have to force execution before mapping:

return roles.ToList().Select(role => Mapper.Map<Role, RoleDto>(role)).ToList();

[EDIT] As Daniel suggests in comments, you can always go from IQueryable to IEnumerable by calling AsEnumerable() and still defer execution:

return roles.AsEnumerable().Select(role => Mapper.Map<Role, RoleDto>(role)).ToList();
27
2/8/2013 10:56:03 AM


Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow