You can do something like below I had to change some of your code
public class PromotionProducts
{
public long Id { get; set; }
public long ProductId { get; set; }
public long qty { get; set; }
public decimal price { get; set; }
public int max { get; set; }
}
var promotionproduct = new List<PromotionProducts>() { new PromotionProducts() { Id = 1, ProductId = 101, qty = 4, price = 25, max = 3 } };
var promotionproduct2 = new List<PromotionProducts>() { new PromotionProducts() { Id = 1, ProductId = 101, qty = 2, price = 25, max = 3 }, new PromotionProducts() { Id = 2, ProductId = 102, qty = 2, price = 35, max = 3 } };
promotionproduct = promotionproduct.Where(x => x.max == 3).ToList();
var qty = promotionproduct.Where(x => x.max == 3).Select(x => x.qty).ToList();
promotionproduct2 = (from p in promotionproduct2
where p.max > 2 || p.max == 3
select p).ToList();
in the where clause you can change the conditions according to your needs