如何从从实体框架模型检索的linq查询中调用方法?

本文关键字:查询 调用 方法 linq 检索 实体 框架 模型 | 更新日期: 2023-09-27 18:08:32

我有以下代码

return (_entities.Users.Select(profile => new ProfileUserListItemDto
                {
                    Email = profile.Email,
                    FirstName = profile.FirstName,
                    Id = profile.Id,
                    LastName = profile.LastName,
                    Role = DtoEntityLookups.EntityRoleToDtoRole(profile.Role),
                    TimeZone = profile.TimeZone
                })).ToList();
public static RoleTypeEnum EntityRoleToDtoRole(Role role)
        {
            if (role == null)
                throw new NoNullAllowedException("Null role supplied to EntityRoleToDtoRole method");
            if (role.Id.ToString() == RolesGuid.AdministratorGuid)
                return RoleTypeEnum.Administrator;
            if (role.Id.ToString() == RolesGuid.ClientGuid)
                return RoleTypeEnum.Client;
            throw new InvalidDataException("Unknown role supplied");
        }
当调用

时,我得到以下错误

LINQ to Entities不识别方法RoleTypeEnum EntityRoleToDtoRole(User.Entities.Entities.Role)'方法,并且该方法不能转换为存储表达式。

我如何将EntityRoleToDtoRole转换为可从实体框架查询调用?

如何从从实体框架模型检索的linq查询中调用方法?

您需要使用Users.AsEnumerable()来能够调用linq中的方法。

return (_entities.Users.AsEnumerable().Select(profile => new ProfileUserListItemDto
                {
                    Email = profile.Email,
                    FirstName = profile.FirstName,
                    Id = profile.Id,
                    LastName = profile.LastName,
                    Role = DtoEntityLookups.EntityRoleToDtoRole(profile.Role),
                    TimeZone = profile.TimeZone
                })).ToList();