簡體   English   中英

EF Core 3.1 不允許對枚舉屬性進行包含搜索

[英]EF Core 3.1 does not allow Contains search on Enum property

我正在嘗試對我的DbSet中的enum屬性進行包含搜索,而 EF Core 3.1 會引發以下錯誤

無法翻譯 LINQ 表達式 'DbSet.Where(d => d.Position.ToString().Contains("acc"))'。 以可翻譯的形式重寫查詢,或通過插入對 AsEnumerable()、AsAsyncEnumerable()、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; }
}

枚舉 - 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
}

數據庫上下文:

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;
}

Position 在我的數據庫中屬於NVARCHAR(MAX)類型。

在此處輸入圖像描述

在此處輸入圖像描述

這是不可能的? 如果是這樣,你能幫我解釋一下嗎?

此問題已記錄在efcore github 存儲庫中,這是現在的解決方法。 enum屬性需要先轉換成object string

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

希望這可以幫助那里的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM