Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net core EF Core:按复杂属性筛选查询(使用自定义值转换器)_.net Core_Ef Core 3.1 - Fatal编程技术网

.net core EF Core:按复杂属性筛选查询(使用自定义值转换器)

.net core EF Core:按复杂属性筛选查询(使用自定义值转换器),.net-core,ef-core-3.1,.net Core,Ef Core 3.1,伙计们 我现在使用EF Core 3.1作为我的数据库提供程序。因此,让我们设想一个具有不同工作角色的简单用户模型(例如,“工作者”、“构建者”、“受支持者”等) 因为EF核心无法将自定义ValueConverter转换为SQL并在服务器端执行。现在3.1.x中仍然没有警告,但是这段代码将在5.x.NET中捕获一个错误 那么,正确编写这个过滤器查询的好方法是什么?我不想抓住整个用户并在客户端对其进行过滤,这可能会导致性能更差 多谢各位 public enum Roles { Worker

伙计们

我现在使用EF Core 3.1作为我的数据库提供程序。因此,让我们设想一个具有不同工作角色的简单用户模型(例如,“工作者”、“构建者”、“受支持者”等)

因为EF核心无法将自定义ValueConverter转换为SQL并在服务器端执行。现在3.1.x中仍然没有警告,但是这段代码将在5.x.NET中捕获一个错误

那么,正确编写这个过滤器查询的好方法是什么?我不想抓住整个用户并在客户端对其进行过滤,这可能会导致性能更差

多谢各位

public enum Roles
{
   Worker = 1,
   Builder = 2,
   Supporter = 3
}

public class User
{
    public Guid Id { get; set; }
    public ICollection<Roles> EmploymentRoles { get; set; }
    ...
}
...
DbSet<User> Users { get; set; }
...
modelBuilder.Entity<User>().Property(f => f.EmploymentRoles).HasConversion(new JsonEnumCollectionToStringConverter<Roles>()); 

    public class JsonEnumCollectionToStringConverter<T> : ValueConverter<ICollection<T>, string> where T : Enum
    {
        public JsonEnumCollectionToStringConverter() :base(entity => JsonConvert.SerializeObject(entity), value => JsonConvert.DeserializeObject<ICollection<T>>(value))
        {
        }
    }
var users = dbContext.Users.Where(e => e.EmploymentRoles.Contains(Roles.Worker)).ToList();