c# - LINQ 和 AutoMapper

标签 c# linq entity-framework automapper

我想知道我是否可以做些什么来让它按预期工作。这在我的代码中运行良好:

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

        return roleList;

但将其更改为:

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

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

导致我以前从未见过的错误:

“LINQ to Entities 无法识别‘Security.Dto.RoleDto MapRole,RoleDto’方法,并且无法将此方法转换为存储表达式”

我不确定我是否能对这个“问题”做点什么……可以说有效的方法无论如何都更具可读性……

最佳答案

您在 IQueryable 上操作,它试图将您提供的方法转换为 SQL。显然,这不会发生,因为您正在传递与 AutoMapper 相关的魔法。有一个简单的解决方案,您必须在映射之前强制执行:

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

[编辑] 正如 Daniel 在评论中建议的那样,您始终可以通过调用 AsEnumerable()IQueryable 转到 IEnumerable 并且仍然延迟执行:

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

关于c# - LINQ 和 AutoMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14770941/

相关文章:

c# - 如何加快在 SQL 数据库表中插入文本文件的速度?

c# - 无法让 DropDownList 与 ViewModel 一起使用

c# - 在 Visual Studio 安装项目中获取程序数据的路径

asp.net-mvc - 元数据集合中不存在标识为 ' ' 的成员。\r\n参数名称 : identity

c# - DbContext 和连接池

c# - 在辅助监视器上显示 Windows 窗体?

c# - MVC LINQ动态排序通过获取列类型

C# JToken.SelectTokens 方法 - 什么 JPath 表达式?

c# - 使用 WPF 和 EF CodeFirst 构建企业 CRUD 应用程序

asp.net-mvc - Entity Framework MVC Controller