Ótimas respostas, mas não se esqueça de uma coisa IMPORTANTE - elas fornecem resultados diferentes!
var idList = new int[1, 2, 2, 2, 2]; // same user is selected 4 times
var userProfiles = _dataContext.UserProfile.Where(e => idList.Contains(e)).ToList();
Isso retornará 2 linhas do banco de dados (e isso pode estar correto, se você quiser apenas uma lista classificada de usuários)
MAS, em muitos casos, você pode querer uma lista não classificada de resultados. Você sempre tem que pensar sobre isso como uma consulta SQL. Veja o exemplo no carrinho de compras da eshop para ilustrar o que está acontecendo:
var priceListIDs = new int[1, 2, 2, 2, 2]; // user has bought 4 times item ID 2
var shoppingCart = _dataContext.ShoppingCart
.Join(priceListIDs, sc => sc.PriceListID, pli => pli, (sc, pli) => sc)
.ToList();
Isso retornará 5 resultados do DB. Usar 'contém' estaria errado neste caso.