To add to EF Nijboers answer, don't repeatedly use DateTime.Now. Take a copy, and use that instead:
DateTime expiryDate = DateTime.Now.AddDays(10);
foreach(Product p in products)
{
if (p.ExpiryDate >= expiryDate)
{
...
}
}
The reason for this is that each time to use DateTime.Now, it creates a new instance with the current date and time. In this example it makes no difference (except to waste a little time and memory), but it can cause intermittent bugs when the day rolls over between checks.
It is good practice to use DateTime.Now as few times as possible to avoid this.