LINQ过滤器用或

时间:2013-02-03 13:40:04

标签: c# linq

我有以下结构:

 One user can have many Groups and a Group can have many users.

现在,我想让所有与用户相同的用户进行过滤。

例如, 用户“Theo”在第一组和第二组中。我希望所有用户都在第一组或第二组。

我如何使用LINQ或c#?

实现此目的

此代码不起作用:

var res = (IEnumerable<User>)Users;
foreach (var item in user.Groups) {
    res = res.Where(usr => usr.Groups.Contains(item));
}
return res.ToList();

Users是我从其他方法获得的列表,userUser类型的参数。

2 个答案:

答案 0 :(得分:2)

我假设:

  • User类的属性Groups类型为List<Group>
  • Group类的属性Users类型为List<User>

使用LINQ SelectMany方法:

var usersInSameGroups = user.Groups.SelectMany(group => group.Users).ToList();

或者在查询语法中:

var usersInSameGroups = (from g in user.Groups
                         from userInGroup in g.Users
                         select userInGroup).ToList();

更新

return (from user2 in Users
        where user2.Groups.Intersect(user.Groups).Any()  // Keeps only user2 if it has a common group with user
        select user2).ToList();

答案 1 :(得分:0)

也许在群组上使用Intersect.Any

var groupsFind = new []{"Group1","Group2"};
var userFound = allUsers
    .Where(u => u.Groups
                 .Select(ug => ug.Name)
                 .Intersect(groupsFind)
                 .Any());

我不了解该模型,用户属于n个组,每个组可以有n个用户。不是最后一个关系是多余的还是与第一个关系相反,反之亦然?