To add to what Richard said, the loop inside method
ProductsOutOfStock
is redundant, it does not add anything to your query variable. So you can simplify to
public static IEnumerable<Product> ProductsOutOfStock() {
return products.Where(p => p.UnitsInStock == 0);}
:)