public static void ValidaPromocao(Pedido pedido, Promocao promocao) { List <PedidoItem> itens = pedido.Itens; foreach (var crit in promocao.Criterios) { switch (crit.Criterio) { case eCriterio.ProdutoUnico: itens = itens.Where(c => c.ProdutoId == Convert.ToInt32(crit.Valor)).ToList(); break; case eCriterio.ProdutoContem: break; case eCriterio.GrupoUnico: itens = itens.Where(c => c.GrupoId == Convert.ToInt32(crit.Valor)).ToList(); break; case eCriterio.GrupoContem: break; case eCriterio.QuantidadeMaiorQue: if (itens.Count <= Convert.ToInt32(crit.Valor)) { itens.Clear(); } break; case eCriterio.QuantidadeMenorQue: if (itens.Count > Convert.ToInt32(crit.Valor)) { itens.Clear(); } break; default: break; } if (crit.Criterio == eCriterio.GrupoUnico) { itens = itens.Where(c => c.GrupoId == Convert.ToInt32(crit.Valor)).ToList(); } else if (crit.Criterio == eCriterio.ProdutoUnico) { itens = itens.Where(c => c.ProdutoId == Convert.ToInt32(crit.Valor)).ToList(); } else if (crit.Criterio == eCriterio.QuantidadeMaiorQue && itens.Count <= Convert.ToInt32(crit.Valor)) { itens.Clear(); } else if (crit.Criterio == eCriterio.QuantidadeMenorQue && itens.Count > Convert.ToInt32(crit.Valor)) { itens.Clear(); } } if (itens.Count == 0) { return; } if (promocao.Premio == ePremio.DescontoUnitarioDe) { pedido.Desconto = itens.Count * promocao.Valor; } }