private bool TestaCabeca(Cabecario item) { bool resultado = Compara(item); if (resultado) { using (BancoDeDados db = new BancoDeDados()) { Regras.AddRange(db.Regras.Where(a => (a.Se.ID == item.ID | a.Ou.Select(o => o.CabecaID).Contains(item.ID) | a.E.Select(o => o.CabecaID).Contains(item.ID))).ToList()); } } return(resultado); }
private void Montar(Regra Regra) { bool Cond = false; if (Regra.Se.Operador == "=") { Cond = Regra.Se.Variavel.Valores.Select(o => o.Valor).Contains(Regra.Se.Valor); } else if (Regra.Se.Operador == "!=") { Cond = !Regra.Se.Variavel.Valores.Select(o => o.Valor).Contains(Regra.Se.Valor); } else if (Regra.Se.Operador == ">") { Cond = Convert.ToDecimal(Regra.Se.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) > Convert.ToDecimal(Regra.Se.Valor); } else if (Regra.Se.Operador == "<") { Cond = Convert.ToDecimal(Regra.Se.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) < Convert.ToDecimal(Regra.Se.Valor); } else if (Regra.Se.Operador == ">=") { Cond = Convert.ToDecimal(Regra.Se.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) >= Convert.ToDecimal(Regra.Se.Valor); } else if (Regra.Se.Operador == "<=") { Cond = Convert.ToDecimal(Regra.Se.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) <= Convert.ToDecimal(Regra.Se.Valor); } if (Regra.Se.NOT) { Cond = !Cond; } int max = 0; int Pos = 0; try { Pos = Regra.Ou.OrderByDescending(o => o.Pos).FirstOrDefault().Pos; if (Pos > max) { max = Pos; } } catch (ArgumentNullException e) { Console.WriteLine(e); } try { Pos = Regra.E.OrderByDescending(o => o.Pos).FirstOrDefault().Pos; if (Pos > max) { max = Pos; } } catch (Exception) { } for (int i = 1; i <= max; i++) { Cabecario temp = new Cabecario(); try { temp = Regra.E.Where(o => o.Pos == i).Select(o => o.Cabeca).SingleOrDefault(); } catch (Exception) { temp = null; } if (temp != null) { if (temp.Operador == "=") { Cond = Cond & temp.Variavel.Valores.Select(o => o.Valor).Contains(temp.Valor); } else if (temp.Operador == "!=") { Cond = Cond & !temp.Variavel.Valores.Select(o => o.Valor).Contains(temp.Valor); } else if (temp.Operador == ">") { Cond = Cond & Convert.ToDecimal(temp.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) > Convert.ToDecimal(temp.Valor); } else if (temp.Operador == "<") { Cond = Cond & Convert.ToDecimal(temp.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) < Convert.ToDecimal(temp.Valor); } else if (temp.Operador == ">=") { Cond = Cond & Convert.ToDecimal(temp.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) >= Convert.ToDecimal(temp.Valor); } else if (temp.Operador == "<=") { Cond = Cond & Convert.ToDecimal(temp.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) <= Convert.ToDecimal(temp.Valor); } if (temp.NOT) { Cond = !Cond; } } try { temp = Regra.Ou.Where(o => o.Pos == i).Select(o => o.Cabeca).SingleOrDefault(); } catch (Exception) { temp = null; } if (temp != null) { if (temp.Operador == "=") { Cond = Cond | temp.Variavel.Valores.Select(o => o.Valor).Contains(temp.Valor); } else if (temp.Operador == "!=") { Cond = Cond | !temp.Variavel.Valores.Select(o => o.Valor).Contains(temp.Valor); } else if (temp.Operador == ">") { Cond = Cond | Convert.ToDecimal(temp.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) > Convert.ToDecimal(temp.Valor); } else if (temp.Operador == "<") { Cond = Cond | Convert.ToDecimal(temp.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) < Convert.ToDecimal(temp.Valor); } else if (temp.Operador == ">=") { Cond = Cond | Convert.ToDecimal(temp.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) >= Convert.ToDecimal(temp.Valor); } else if (temp.Operador == "<=") { Cond = Cond | Convert.ToDecimal(temp.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) <= Convert.ToDecimal(temp.Valor); } if (temp.NOT) { Cond = !Cond; } } } if (Cond) { Aplicadas.Add(Regra); foreach (var item in Regra.Entao) { Entao(item); } } }
private bool Compara(Cabecario Cabeca) { decimal v1, v2; bool result = false; switch (Cabeca.Operador) { case "=": if (Cabeca.Valor == Valor.Valor) { result = true; } break; case "!=": if (Cabeca.Valor != Valor.Valor) { result = true; } break; default: try { v1 = Convert.ToDecimal(Cabeca.Valor); v2 = Convert.ToDecimal(Valor.Valor); } catch (Exception) { return(false); } switch (Cabeca.Operador) { case ">": if (v2 > v1) { result = true; } break; case "<": if (v2 < v1) { result = true; } break; case "<=": if (v2 <= v1) { result = true; } break; case ">=": if (v2 >= v1) { result = true; } break; } break; } if (Cabeca.NOT) { return(!result); } return(result); }