KDa*_*ani 6 c# entity-framework-core .net-core ef-core-3.1
我有一个Person带有枚举属性的模型Gender,它作为字符串存储在数据库中。我想进行查询以按性别的子字符串过滤数据。例如,如果query.SearchLike是"Fe"或"em",我想找回所有女性。不幸的是,下面的代码抛出异常。
builder.Entity<Person>().Property(x => x.Gender).HasConversion<string>();
Run Code Online (Sandbox Code Playgroud)
public async Task<IList<Person>> ListAsync(PersonsQuery query)
{
IQueryable<Person> queryable = _context.Persons.AsNoTracking();
return await queryable
.Where(x => x.Gender.ToString().Contains(query.SearchLike))
.ToListAsync();
}
Run Code Online (Sandbox Code Playgroud)
例外:
无法翻译 LINQ 表达式 'DbSet\r\n .Where(x => x.Gender.ToString().Contains(__query_SearchLike_0))'。以可翻译的形式重写查询,或者通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用来显式切换到客户端计算。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038 。
我找到了解决方案。首先需要将枚举转换为object,然后转换为string。
public async Task<IList<Person>> ListAsync(PersonsQuery query)
{
IQueryable<Person> queryable = _context.Persons.AsNoTracking();
return await queryable
.Where(x => ((string)(object)x.Gender).Contains(query.SearchLike))
.ToListAsync();
}
Run Code Online (Sandbox Code Playgroud)
EF Core Github 存储库中的相关问题。
| 归档时间: |
|
| 查看次数: |
2206 次 |
| 最近记录: |