public ActionResult Cabeca(int ID, VMRegra Modelo) { if (ModelState.IsValid) { Modelo.Regra = dbSE.Regras.Where(a => a.ID == ID).SingleOrDefault(); Cabecario Cabecario = new Cabecario(); Cabecario.NOT = Modelo.Not; Cabecario.Operador = Modelo.Operador; Cabecario.Valor = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(Modelo.Valor); Cabecario.Variavel = dbSE.Variaveis.Where(o => o.Nome == Modelo.VarID).SingleOrDefault(); dbSE.Cabecarios.Add(Cabecario); if (Modelo.Conjuncao) { ListaE E = new ListaE(); E.Cabeca = Cabecario; E.Pos = Modelo.Regra.Conj.Count(); E.Regra = Modelo.Regra; dbSE.ListE.Add(E); Modelo.Regra.E.Add(E); dbSE.Regras.AddOrUpdate(Modelo.Regra); dbSE.SaveChanges(); return(RedirectToAction("Cabeca/" + ID)); } else { ListaOU OU = new ListaOU(); OU.Cabeca = Cabecario; OU.Pos = Modelo.Regra.Conj.Count(); OU.Regra = Modelo.Regra; dbSE.ListOU.Add(OU); Modelo.Regra.Ou.Add(OU); dbSE.Regras.AddOrUpdate(Modelo.Regra); dbSE.SaveChanges(); return(RedirectToAction("Cabeca/" + ID)); } } Modelo.Regra = dbSE.Regras.Where(a => a.ID == ID).SingleOrDefault(); Modelo.Variaveis = dbSE.Variaveis.Where(o => o.Base.Select(a => a.Base.ID).Contains(Modelo.BaseID)).Select(a => a.Nome).ToList(); Modelo.Operadores = new List <string> { "=", "!=", "<", "<=", ">", ">=" }; return(View(Modelo)); // return RedirectToAction("Cabeca/" + ID); }
private void Montar(Regra Regra) { BancoDeDados db = new BancoDeDados(); Regra = db.Regras.Where(a => a.ID == Regra.ID).SingleOrDefault(); double confianca = 1; bool resultado = Cabecas.Select(a => a.Item1.ID).Contains(Regra.Se.ID); if (resultado) { confianca = Cabecas.Where(a => a.Item1.ID == Regra.Se.ID).SingleOrDefault().Item2; } int cont = Regra.E.Count + Regra.Ou.Count; if (cont == 0) { if (resultado) { Aplicar(Regra, confianca); return; } else { return; } } ; for (int i = 1; i <= cont; i++) { try { ListaE temp = Regra.E.Where(a => a.Pos == i).SingleOrDefault(); resultado = resultado && Cabecas.Select(a => a.Item1.ID).Contains(temp.Cabeca.ID); if (resultado) { confianca *= Cabecas.Where(a => a.Item1.ID == temp.Cabeca.ID).SingleOrDefault().Item2; } } catch (Exception) { } try { ListaOU temp = Regra.Ou.Where(a => a.Pos == i).SingleOrDefault(); resultado = resultado || Cabecas.Select(a => a.Item1.ID).Contains(temp.Cabeca.ID); double aux = Cabecas.Where(a => a.Item1.ID == temp.Cabeca.ID).SingleOrDefault().Item2; if (resultado) { confianca = (confianca + aux) - (confianca * aux); } } catch (Exception) { } } if (resultado) { Aplicar(Regra, confianca); } }