public async Task <IHttpActionResult> GetNameById(string Id)
        {
            try
            {
                log.Info(new MDCSet(this.ControllerContext.RouteData), new InfoException(Id));
                var campo = await _repository.GetNameById(Id);

                return(Ok(campo));
            }
            catch (Exception e)
            {
                log.Error(new MDCSet(this.ControllerContext.RouteData), e);

                return(InternalServerError(e));
            }
        }
        public async Task <IEnumerable <SoftwarePersonal> > getData(DataServerSide ss)
        {
            UORepository uo = new UORepository();

            try
            {
                var v = (from a in
                         _db.dbSetSoftwarePersonal
                         .Include(x => x.Proyecto)
                         .Include(x => x.TipoSoftware)
                         .Include(x => x.Autores)
                         .Include(x => x.DerechosAutor)
                         .Where(x => x.EstadoFlujoId == 3)
                         select a);
                ss.recordsTotal = v.Count();



                if (!string.IsNullOrEmpty(ss.ClaveUnidad))
                {
                    //var uni = await uo.GetByIdWithChildren(ss.ClaveUnidad);
                    //HashSet<String> clavesUnidad = null;
                    //if (uni.tipoO < 3)
                    //{
                    //    var unidades = uni.Children.Select(x => x.ClaveUnidad).ToList();
                    //    clavesUnidad = new HashSet<String>(unidades);
                    //}
                    //else
                    //{
                    //    clavesUnidad = new HashSet<String>();
                    //    clavesUnidad.Add(ss.ClaveUnidad);
                    //}

                    v = v.Where(x => x.GerenciaClave == ss.ClaveUnidad);

                    //v = v.Where(e => clavesUnidad.Contains(e.Proyecto.UnidadOrganizacionalId));
                }


                if (!String.IsNullOrEmpty(ss.Titulo)) //busqueda por titulo
                {
                    var listaDA = await GetPKTitulo(ss.Titulo);

                    v = v.Where(e => listaDA.Contains(e.SoftwarePersonalId));
                }


                if (!String.IsNullOrEmpty(ss.proyectoId))
                {
                    var listaDA = await GetDALikeProyecto(ss.proyectoId);

                    v = v.Where(e => listaDA.Contains(e.SoftwarePersonalId));
                }

                //if (!String.IsNullOrEmpty(ss.DerechoAutor))
                //{
                //    var listaDA = await GetPKDerechoAutor(ss.DerechoAutor);
                //    v = v.Where(e => listaDA.Contains(e.SoftwarePersonalId));
                //}

                if (ss.DerechosAutorId != null)
                {
                    v = v.Where(x => x.DerechosAutorId == ss.DerechosAutorId);
                }

                if (!String.IsNullOrEmpty(ss.Tipo))
                {
                    v = v.Where(e => e.TipoSoftwareId.ToString().Equals(ss.Tipo));
                }

                if (!String.IsNullOrEmpty(ss.Autor))
                {
                    var listaDA = await GetPKAutor(ss.Autor);

                    v = v.Where(e => listaDA.Contains(e.SoftwarePersonalId));
                }

                if (!String.IsNullOrEmpty(ss.searchValue))
                {
                    PersonasRepository rp = new PersonasRepository();
                    var clavesPer         = await rp.GetAllClavesByLikeNombreLatin1(ss.searchValue);

                    //var autor= await
                    var softwares = await _db.dbSetAutorSoftware.AsNoTracking()
                                    .Where(x => clavesPer.Contains(x.ClaveAutor))
                                    .Select(x => x.SoftwarePersonalId)
                                    .ToListAsync();

                    var listaUnidades = await uo.GetPorNombreUnidad(ss.searchValue);

                    var titulo = await GetPKTitulo(ss.searchValue);

                    var tipoSoftware = await GetPKTipoSoftware(ss.searchValue);

                    var proyecto = await GetProyectos(ss.searchValue);

                    var proyecto2 = await GetProyectos2(ss.searchValue);

                    var listaDA = await GetDerechosAutorByCollate(ss.searchValue);

                    //var listaAutor = await GetProyectos(ss.searchValue);


                    v = v.Where(e => titulo.Contains(e.SoftwarePersonalId) ||
                                listaDA.Contains(e.DerechosAutorId) ||
                                softwares.Contains(e.SoftwarePersonalId) ||
                                listaUnidades.Contains(e.GerenciaClave) ||
                                proyecto.Contains(e.ProyectoId) ||
                                proyecto2.Contains(e.ProyectoId) ||
                                tipoSoftware.Contains(e.TipoSoftwareId)


                                );
                }


                //sort
                if (!(string.IsNullOrEmpty(ss.sortColumn) && string.IsNullOrEmpty(ss.sortColumnDir)))
                {
                    //for make sort simpler we will add Syste.Linq.Dynamic reference
                    v = v.OrderBy(ss.sortColumn + " " + ss.sortColumnDir);
                }

                ss.recordsFiltered = v.Count();
                var entities = await v.Skip(ss.skip).Take(ss.pageSize).AsNoTracking().ToListAsync();

                if (entities != null && entities.Count > 0)
                {
                    AutorSoftwareRepository aut = new AutorSoftwareRepository(_db);
                    var listaSW       = entities.Select(x => x.SoftwarePersonalId).ToList();
                    var clavesAutores = await aut.GetClavesAutorBySoftwarsIdCollection(listaSW);

                    HashSet <String> clavesEmpleado = new HashSet <string>(clavesAutores);


                    PersonasRepository p = new PersonasRepository();
                    var personas         = await p.GetAllCollectionMAXTodos(clavesEmpleado);

                    List <Personas> pers = personas.ToList();

                    //var unidadesOrgs = (await uo.GetAllCollectionMAX(entities.Where(x => x.Proyecto != null).Select(x => x.Proyecto.UnidadOrganizacionalId).ToList())).ToList();
                    foreach (var e in entities)
                    {
                        foreach (var a in e.Autores)
                        {
                            try
                            {
                                string cad = a.ClaveAutor.Trim();
                                a.ClaveAutor     = a.ClaveAutor.Trim();
                                a.NombreCompleto = pers.Find(x => x.ClavePersona == cad).NombreCompleto;
                            }
                            catch (Exception ex) { }
                        }


                        if (e.GerenciaClave != null)
                        {
                            e.NombreUnidadOrganizacional = await uo.GetNameById(e.GerenciaClave);
                        }
                    }
                }
                return(entities);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }