C#中无法将EntityQueryable<String>转换为List<CustomerRoles>求助
问题解决方法
错误根源
你当前代码存在两个关键问题:
mapping.Select(v => v.CustomerRole.RoleName)返回的是字符串序列(IQueryable<string>),和你要返回的CustomerRoles枚举类型完全不匹配,直接强转必然报错。- 没有调用
ToList()把EF的查询对象转换成内存集合,直接强转EF的查询代理对象也会失败。
修正后的代码
public virtual List<CustomerRoles> roleByname(string name) { var mapping = repo.GetAll<BookingMapping>(x => x.Customer.name == name) .Include(x => x.Customer) .Include(x => x.CustomerRole); // 将字符串角色名转换为对应枚举值,再转为List返回 List<CustomerRoles> userRoles = mapping .Select(v => Enum.Parse<CustomerRoles>(v.CustomerRole.RoleName)) .ToList(); return userRoles; }
额外优化建议
- 如果
RoleName的字符串可能和枚举名大小写不一致,或者存在格式差异,可以添加忽略大小写的参数:Enum.Parse<CustomerRoles>(v.CustomerRole.RoleName, ignoreCase: true) - 为避免无效字符串导致转换异常,可使用
Enum.TryParse做安全转换,过滤掉无效角色:List<CustomerRoles> userRoles = new List<CustomerRoles>(); foreach (var item in mapping) { if (Enum.TryParse<CustomerRoles>(item.CustomerRole.RoleName, out var role)) { userRoles.Add(role); } }
内容的提问来源于stack exchange,提问作者its me
相关产品推荐
相关产品推荐

