var products = shopProducts.Where(p => listOfProducts.Any(l => p.Name == l.Name))
.ToList();
Для LINQ-to-Objects, если listOfProducts
содержит много элементов, то может получить лучшую производительность, если вы создадите HashSet<T>
, содержащий все необходимые имена, а затем используете его в своемзапрос.HashSet<T>
имеет производительность поиска O (1) по сравнению с O (n) для произвольного IEnumerable<T>
.
var names = new HashSet<string>(listOfProducts.Select(p => p.Name));
var products = shopProducts.Where(p => names.Contains(p.Name))
.ToList();
Для LINQ-to-SQL я ожидал (надеюсь?), Что провайдер можетоптимизировать сгенерированный SQL автоматически без необходимости ручной настройки запроса.