public PendingRequestLogic GetNextRequest(int id_Usuario) { PendingRequestLogic request = new PendingRequestLogic(); try { //Get Prensas for user List <int> prensasUsuario = _catalogPrensas.GetUserPrensas(id_Usuario); List <PrensaCatalog.DTO.Prensa> listCaracteristicas = new List <PrensaCatalog.DTO.Prensa>(); if (prensasUsuario.Count > 0) { foreach (int prensaId in prensasUsuario) { listCaracteristicas.Add(GetCaracteristicasPrensa(prensaId)); } //Agrupamos y cogemos el grupo con mayor prioridad var groupsPrioridad = listCaracteristicas.OrderByDescending(x => x.prioridad).GroupBy(x => x.prioridad).First(); //Convertimos en lista con IDs de prensa con mayor prioridad var lstMaxPrioridad = groupsPrioridad.Select(x => x).ToList(); var lstIdsMaxPrioridad = lstMaxPrioridad.Select(x => x.prensa.Id).ToList(); //Buscamos las solicitudes asociadas a las prensas var matches = _dicRequest.Where(kvp => lstIdsMaxPrioridad.Contains(kvp.Value.GetIdPrensa)).Select(x => x); //Elegimos la solicitud más antigua var match = from x in matches where x.Value.GetDateGeneration == matches.Min(v => v.Value.GetDateGeneration) select x.Value; if (match.Count() > 0) { request = match.ElementAt(0); } } }catch (Exception ex) { log.Error("GetNextRequest()", ex); } return(request); }