Хорошие ответы выше, но не забывайте одну ВАЖНУЮ вещь - они дают разные результаты!
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();
Это вернет 2 строки из БД (и это может быть правильно, если вам просто нужен отдельный отсортированный список пользователей)
НО во многих случаях вам может понадобиться несортированный список результатов. Вы всегда должны думать об этом как о SQL-запросе. Пожалуйста, просмотрите пример с корзиной покупок в интернет-магазине, чтобы проиллюстрировать, что происходит:
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();
Это вернет 5 результатов из БД. В этом случае использование «содержит» было бы неправильным.