public List<Madre> BuscarSemejantes(ParametrosBusqueda parBusqueda)
        {
            long identificador = Convert.ToInt64(parBusqueda.Identificador);
            MadreTemporal madreTemp = new MadreTemporal();
            madreTemp = Listar().Where(m => m.Id == identificador).FirstOrDefault();

            Dictionary<string, object> propiedadesBusqueda = ObtenerElementos(parBusqueda, MemberTypes.Property);

            List<Madre> madresCandidatas = new List<Madre>();
            Madre peorSemejanza = new Madre();

            int distanciaCalculada;
            int peorDistancia = -1;

            //string strParametrosMadreTemporal = madreTemp.NombreCompleto;
            string cadenaMadreTemporal = ConstruirParametroMadreTemporal(madreTemp, propiedadesBusqueda);

            //foreach (Madre ma in madre.Listar())
            foreach (Madre ma in db.Madres.ToList())
            {
                distanciaCalculada = Distancia.Levenshtein(cadenaMadreTemporal, ConstruirParametroMadre(ma, propiedadesBusqueda));
                if (madresCandidatas.Count < 10)
                {
                    ma.IdMunicipio = distanciaCalculada;    //**
                    madresCandidatas.Add(ma);
                    if (distanciaCalculada > peorDistancia)
                    {
                        peorDistancia = distanciaCalculada;
                        peorSemejanza = ma;
                    }
                }
                else
                {
                    if (distanciaCalculada < peorDistancia)
                    {
                        ma.IdMunicipio = distanciaCalculada;    //**
                        madresCandidatas.Remove(peorSemejanza);
                        madresCandidatas.Add(ma);

                        // Peor distancia entre los 10
                        peorDistancia = -1;
                        foreach (var item in madresCandidatas)
                        {
                            distanciaCalculada = Distancia.Levenshtein(madreTemp.NombreCompleto, item.NombreCompleto);
                            if (distanciaCalculada > peorDistancia)
                            {
                                peorDistancia = distanciaCalculada;
                                peorSemejanza = item;
                            }
                        }
                    }
                }
            }
            return madresCandidatas.OrderBy(m => m.IdMunicipio).ToList();
        }
Exemple #2
0
        public string MadresTemporal()
        {
            ModeloRevisionManual mrm = new ModeloRevisionManual();
            mrm.EliminarTodoMadreTempo();

            string connectionString = "Data Source=HERNAN-PC04;Initial Catalog=BDPersonas_new;User ID=sa; password=123456";
            string queryString = @"select
                                    Nombres,
                                    PrimerApellido,
                                    SegundoApellido,
                                    Nombres+PrimerApellido+SegundoApellido AS 'NombreCompleto',
                                    DocumentoIdentidad,
                                    0 AS 'TipoDocumentoIdentidad',
                                    FechaNacimiento
                                from SECC_1A
                                where idS1_A < 100 and S1_02 = 2 and FechaNacimiento is not null";

            string resultado = "";

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlCommand command = new SqlCommand(queryString, connection);
                connection.Open();
                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    MadreTemporal madreTempo = new MadreTemporal();

                    madreTempo.Id = IdentifierGenerator.NewId();
                    madreTempo.IdSesion = 1;
                    madreTempo.FechaUltimaTransaccion = DateTime.Now;
                    madreTempo.FechaRegistro = DateTime.Now;
                    madreTempo.DescripcionEstadoSincronizacion = "";

                    madreTempo.Nombres = reader[0].ToString();
                    madreTempo.PrimerApellido = reader[1].ToString();
                    madreTempo.SegundoApellido = reader[2].ToString();
                    madreTempo.TercerApellido = "";
                    madreTempo.NombreCompleto = madreTempo.Nombres + madreTempo.PrimerApellido + madreTempo.SegundoApellido + madreTempo.TercerApellido;
                    madreTempo.DocumentoIdentidad = reader[4].ToString();
                    madreTempo.TipoDocumentoIdentidad = TipoDocumentoIdentidad.CarnetIdentidad;
                    madreTempo.FechaNacimiento = Convert.ToDateTime(reader[6].ToString());

                    //madreTempo.IdDepartamento = 69;
                    //madreTempo.IdProvincia = 540;
                    //madreTempo.IdMunicipio = 2254;
                    madreTempo.IdDepartamento = 1640861101374000000;
                    madreTempo.IdProvincia = 1640861101405000000;
                    madreTempo.IdMunicipio = 1640861101436000000;

                    madreTempo.LocalidadNacimiento = "";
                    madreTempo.Defuncion = false;

                    mrm.Crear(madreTempo);
                }
                reader.Close();
            }
            return "OK: " + resultado;
        }
 public void Crear(MadreTemporal madreTemp)
 {
     db.MadresTemporal.Add(madreTemp);
     db.SaveChanges();
 }
 private string ConstruirParametroMadreTemporal(MadreTemporal madreTemp, Dictionary<string, object> propiedadesObejtoBusqueda)
 {
     string cadenaA = "";
     foreach (var item in propiedadesObejtoBusqueda)
     {
         if (item.Key == "Identificador") continue;
         if ((bool)item.Value)
         {
             switch (item.Key)
             {
                 case "Nombres": cadenaA += madreTemp.Nombres; break;
                 case "PrimerApellido": cadenaA += madreTemp.PrimerApellido; break;
                 case "SegundoApellido": cadenaA += madreTemp.SegundoApellido; break;
                 case "TercerApellido": cadenaA += madreTemp.TercerApellido; break;
                 case "NombreCompleto": cadenaA += madreTemp.NombreCompleto; break;
                 case "DocumentoIdentidad": cadenaA += madreTemp.DocumentoIdentidad; break;
                 case "FechaNacimiento": cadenaA += madreTemp.FechaNacimiento; break;
                 case "LocalidadNacimiento": cadenaA += madreTemp.LocalidadNacimiento; break;
             }
         }
     }
     return cadenaA;
 }