Я бы сказал:
var products = from product in lstProds
join employee in lstEmps on product.SiteId equals employee.SiteId
select product;
Однако, если есть несколько сотрудников с одинаковым идентификатором сайта, вы получите продукты несколько раз. Вы можете использовать Distinct
, чтобы исправить это, или создать набор идентификаторов сайта:
var siteIds = new HashSet<int>(lstEmps.Select(emp => emp.SiteId));
var products = lstProds.Where(product => siteIds.Contains(product.SiteId));
Это предполагает, что SiteId
- это int
- если это анонимный тип или что-то подобное, вам может потребоваться дополнительный метод расширения:
public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source)
{
return new HashSet<T>(source);
}
Тогда:
var siteIds = lstEmps.Select(emp => emp.SiteId).ToHashSet();
var products = lstProds.Where(product => siteIds.Contains(product.SiteId));
В качестве альтернативы, если у вас мало сотрудников, это будет работать, но относительно медленно:
var products = lstProds.Where(p => lstEmps.Any(emp => p.SiteId == emp.SiteId));
Добавьте вызов ToList
к любому из этих подходов, чтобы получить List<Product>
вместо IEnumerable<Product>
.