Насколько я понимаю, переменная userRoles
содержит некоторую коллекцию в памяти (например, List
, массив et c.), Содержащую некоторые настраиваемые Enum
значения, которые вы хотите использовать в качестве фильтра для объекта, имеющего string
свойство.
EF Core имеет очень ограниченную поддержку коллекций в памяти внутри запроса LINQ to Entities. В основном коллекции примитивных типов и Enumerable.Contains
.
Итак, что вы можете сделать в этом конкретном случае c, так это преобразовать пользовательскую коллекцию Enum
значений в коллекцию строк, содержащую желаемые имена вне запроса EF Core (1), а затем используйте его с оператором Contains
внутри (2):
var userRoleNames = userRoles.Select(ur => ur.ToString()); // (1)
var roles = await _context.Roles
.Where(r => userRoleNames.Contains(r.Name)) // (2)
.ToListAsync();