List里面的列表 - 过滤器

时间:2015-02-27 09:42:28

标签: linq c#-4.0

我需要获得用户与当前用户相同的所有频道

  • allChannels是频道列表

  • 用户是每个频道中的一个数组

    allChannels.Select(channel => new Channel 
    { 
       users = channel.Users.Where(user => user.userId == currentUserId).ToArray()
    }).ToList();
    

这总是返回所有通道而不是过滤

2 个答案:

答案 0 :(得分:1)

您需要检查Users是否包含具有给定ID的任何用户:

allChannels.Where(c => c.Users.Any(u => u.UserId == currentUserId)).ToList();

答案 1 :(得分:0)

您可以使用SelectMany执行此操作: -

var result = allChannels.SelectMany(x => x.Users,
                         (channelObj, user) => new { channelObj, user})
                        .Where(x => x.user== currentUserId)
                        .Select(x => x.channelObj);