Linq查询在字符串列表中查找字符串

时间:2015-04-14 13:40:06

标签: c# linq

我有这个查询

var val = from user in allUsers where currentUserTeams.Contains(user.Teams) select user;

其中allusers包含每个具有Teams对象的用户,这是一个团队ID列表,currentUserTeams包含团队ID列表。我使用上面的linq来查明是否有任何用户是currentuserteams团队id的团队的一部分,但似乎没有工作

2 个答案:

答案 0 :(得分:2)

假设您有ID作为团队ID属性,您可以使用Enumerable.Any<TSource> Method (IEnumerable<TSource>, Func<TSource, Boolean>)检查序列中的任何元素是否满足条件。

var val = allUsers
    .Where(u =>  
        u.Teams.Any(t => currentUserTeams.Any(c => c == t.Id)
    )
    .ToList();

答案 1 :(得分:0)

如果您的意思是:

,您的问题并不十分明确
  

包含每个userTeams,其中team id列表currentUserTeams包含team id列表。

  

我使用上面的linq来查明user是否属于团队的一部分   currentuserteams团队ID

1。两个列表都包含正方形Ids,并且您要检查allUsers的任何用户是否属于其中一个currentUserTeams,那么你应该去:

var val = (from user in allUsers
          where currentUserTeams.Any(curentUserTeamId=>user.Teams.Any(teamId=>teamId == curentUserTeamId)
          select user).ToList();

或者

2。两个列表都包含Team,并且您要检查allUsers中是否有currentUserTeams是其中一个var val = (from user in allUsers where currentUserTeams.Any(curentUserTeam=>user.Teams.Any(team=>team.Id == curentUserTeam.Id) Select).ToList(); 的一部分,你应该去:

var memberList = new List<User>();

AllUsers.Foreach(user=>
{
    user.Teams.Foreach(id=>
                      {
                          if(currentUserTeams.Contains(id)
                          {
                              memberList.Add(user);
                              Break; //Because you don't need to loop through the rest of the sequence 
                          }
                      })
})

更新:使用Foreach:

{{1}}