Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/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
C# 集合属性的EF Core 5.0.x QueryFilter(带ValueConversion)_C#_Linq_Entity Framework Core_.net 5_Global Query Filter - Fatal编程技术网

C# 集合属性的EF Core 5.0.x QueryFilter(带ValueConversion)

C# 集合属性的EF Core 5.0.x QueryFilter(带ValueConversion),c#,linq,entity-framework-core,.net-5,global-query-filter,C#,Linq,Entity Framework Core,.net 5,Global Query Filter,我有一个带有字符串集合属性的Url实体,该属性包含角色名称: public class Url : BaseEntity { public ICollection<string> Roles { get; private set; } = new HashSet<string>(); } 我需要的是Url实体的全局查询过滤器,如下所示: builder.Entity<Url>() .HasQu

我有一个带有字符串集合属性的
Url
实体,该属性包含角色名称:

public class Url : BaseEntity
    {
         public ICollection<string> Roles { get; private set; } = new HashSet<string>();
    }
我需要的是Url实体的全局查询过滤器,如下所示:

builder.Entity<Url>()
                .HasQueryFilter(url => !url.Deleted && (url.Roles.Count == 0 || url.Roles.Intersect(_tokenAccessor.UserRoles).Any()));
LINQ表达式'DbSet() 。其中(u=>!(u.Deleted)和&u.Roles.Count==0)无法翻译。或者以可以翻译的形式重写查询, 或者通过插入对的调用显式切换到客户端评估 “AsEnumerable”、“AsAsAsAsAsyncEnumerable”、“ToList”或“ToListSync”


是否有方法访问全局查询筛选器中的
角色
属性?

我有个坏消息要告诉你。这是行不通的。如果EF无法为查询筛选器创建SQL,则所有操作都将失败。如何为拆分的哈希集创建SQL?也许有一个选项可以将字符串字段额外映射到字符串属性,并在查询筛选器中使用此属性?这是很有可能的,但需要一些SQL魔法。首先,在简单的
Where
query中训练这个过滤器,如果它能工作,你可以将它移动到queryfilter。在我看来,你应该重新设计你的权限系统,因为没有DB索引支持的查询将来会带来更多的麻烦。谢谢。我现在更改了数据库设计。这些角色现在由n:m导航引用,通过这种方法,我能够使查询过滤器工作。
builder.Entity<Url>()
                .HasQueryFilter(url => !url.Deleted && (url.Roles.Count == 0 || url.Roles.Intersect(_tokenAccessor.UserRoles).Any()));
builder.Entity<Url>()
                .HasQueryFilter(url => !url.Deleted && (url.Roles.Count == 0));