C# 获取枚举值时获取Linq表达式错误。我采用了不同的谷歌技巧,但没有帮助。I';我是Ef Core的新手

C# 获取枚举值时获取Linq表达式错误。我采用了不同的谷歌技巧,但没有帮助。I';我是Ef Core的新手,c#,entity-framework-core,ef-core-3.1,C#,Entity Framework Core,Ef Core 3.1,获取枚举值时获取Linq表达式错误。我采用了不同的谷歌技巧,但没有帮助。我是Ef Core的新手 我通过这一行将枚举类型的userRoles返回给var角色。但是我得到了null。 var roles=await_context.roles.Where(r=>userRoles.Any(ur=>ur.ToString()==r.Name)).ToListAsync() System.InvalidOperationException:LINQ表达式“DbSet” .Where(r=>\u用户角色

获取枚举值时获取Linq表达式错误。我采用了不同的谷歌技巧,但没有帮助。我是Ef Core的新手 我通过这一行将枚举类型的userRoles返回给var角色。但是我得到了null。 var roles=await_context.roles.Where(r=>userRoles.Any(ur=>ur.ToString()==r.Name)).ToListAsync()

System.InvalidOperationException:LINQ表达式“DbSet” .Where(r=>\u用户角色\u 0
.Any(ur=>ur.ToString()==r.Name))'无法翻译。要么以可以翻译的形式重写查询,要么通过插入对AsEnumerable()、AsAsAsAsyncEnumerable()、ToList()或ToListSync()的调用显式切换到客户端计算。

据我所知,
userRoles
变量保存一些内存集合(如
列表
、数组等)包含一些自定义的
Enum
值,这些值要用作具有
string
属性的实体的筛选器

EF Core对LINQ到实体查询中内存集合的支持非常有限。基本上是基元类型和
可枚举的集合。包含

因此,在这种特定情况下,您可以将自定义的
Enum
values集合转换为包含EF核心查询(1)外部所需名称的字符串集合,然后将其与内部的
Contains
运算符一起使用(2):


你能粘贴实际的代码吗?异常代码很有用,但最好也能看到实际的代码。这能回答你的问题吗?查询被转换为sql<代码>ToString()
不可翻译为sql。用户角色难道没有像
ur.Name
这样的属性(列!)吗?虽然这在Core2.0中可以正常工作,但在3.1.3中不起作用@RenéVogt userrole在其id中包含用户和角色类。许多人对在Core 2.0中工作的代码存在问题,而在Core 3.0或Core 3.1中不工作。
var userRoleNames = userRoles.Select(ur => ur.ToString()); // (1)
var roles = await _context.Roles
    .Where(r => userRoleNames.Contains(r.Name)) // (2)
    .ToListAsync();