2015-02-27 3 views
0

мне нужно, чтобы получить все каналы, где пользователь является такой же, как для текущего пользователяСписок внутри списка - Фильтр

  • allChannels является список Channel

  • Пользователи представляет собой массив в каждом канале

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

Это всегда возвращает все каналы и не фильтрует

ответ

1

Вы должны проверить, если Users содержит какой-либо пользователя с указанным идентификатором:

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

Спасибо, http://stackoverflow.com/questions/14663971/using-linq-select-list-inside-list Как это работает? Я что-то пропустил? Я считаю, что фамилия там такая же, как userId здесь? –

0

Вы можете сделать это с помощью SelectMany: -

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