EF Core 3.1 不允许在 Enum 属性上进行 Contains 搜索。

我想对以下内容进行包含搜索 enum 我的财产 DbSet 而EF Core 3.1则出现以下错误。

LINQ表达式’DbSet .Where(d => d.Position.ToString().Contains(“acc”))’无法翻译。 要么以可以翻译的形式重写查询,要么通过插入对AsEnumerable()、AsyncEnumerable()、ToList()或ToListAsync()的调用,显式地切换到客户端评估。

实体。

public class DemoEntity
{
    [Key]
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Position Position { get; set; }
}

Enum – Position:

public enum Position
{
    [Display(Name = "Accountant")]
    Accountant,
    [Display(Name = "Chief Executive Officer (CEO)")]
    ChiefExecutiveOfficer,
    [Display(Name = "Integration Specialist")]
    IntegrationSpecialist,
    [Display(Name = "Junior Technical Author")]
    JuniorTechnicalAuthor,
    [Display(Name = "Pre Sales Support")]
    PreSalesSupport,
    [Display(Name = "Sales Assistant")]
    SalesAssistant,
    [Display(Name = "Senior Javascript Developer")]
    SeniorJavascriptDeveloper,
    [Display(Name = "Software Engineer")]
    SoftwareEngineer
}

DbContext:

public class DemoDbContext : DbContext
{
    public DemoDbContext(DbContextOptions options)
        : base(options) { }

    public DbSet<DemoEntity> Demos { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder
            .Entity<DemoEntity>()
            .Property(e => e.Position)
            .HasConversion<string>();
    }
}

当我按以下方式查询该表时,我得到了错误信息

try
{
    var test = await _context.Demos.Where(x => x.Position.ToString().Contains("acc")).ToListAsync();
}
catch (System.Exception e)
{
    //throw;
}

该职位属于以下类型 NVARCHAR(MAX) 在我的数据库中。

enter image description here

enter image description here

这是不可能的吗?如果是这样,请你能帮我解释一下吗?

解决方案:

这个问题已经被记录在 efcore github repo 而这是现在的变通方法。的 enum 财产需要铸成 object 再到 string

var test = await _context.Demos.Where(x => ((string) object)x.Position).Contains("acc")).ToListAsync();

希望能帮到别人。

给TA打赏
共{{data.count}}人
人已打赏
未分类

为什么我在下面的代码中一直得到'Else Without If'错误?[重复]

2022-9-24 9:32:23

未分类

我如何配置webpack-dev-server在重载前关闭浏览器上的 "beforeunload "事件?

2022-9-24 9:32:25

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索