You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中无法将EntityQueryable<String>转换为List<CustomerRoles>求助

问题解决方法

错误根源

你当前代码存在两个关键问题:

  1. mapping.Select(v => v.CustomerRole.RoleName)返回的是字符串序列(IQueryable<string>),和你要返回的CustomerRoles枚举类型完全不匹配,直接强转必然报错。
  2. 没有调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:52:13