我有以下结构:
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
是我从其他方法获得的列表,user
是User
类型的参数。
答案 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个用户。不是最后一个关系是多余的还是与第一个关系相反,反之亦然?