首页 > 解决方案 > 过滤对象集合以检查它们是否具有数组的属性部分

问题描述

给定一个字符串集合:

List<string> roles;

和用户定义:

public class User
{
  public List<Role> Roles {get;set;}
}

public class Role {
  public string RoleName {get;set;}
}

如果我有一个列表用户和字符串集合角色,我如何过滤在角色数组中具有指定角色的用户?

List<string> roles = ...;
List<User> users = ...;
List<User> filteredUsers = new List<User>();

//I am stuck trying to figure out a single lambda expression to populate filteredUsers
filteredUsers = users.FindAll(u => u.Roles.Contains(r => r.RoleName.Contains(roles)));

因此,如果角色包含“管理员、超级用户”filteredUsers 将只是管理员和超级用户。

标签: c#lambda

解决方案


尝试这个:

var filteredUsers = users.Where(x => x.Roles.Any(z => roles.Contains(z.RoleName)));

注意:如果您使用 LINQ to db(例如实体框架),性能将非常糟糕。


推荐阅读