none
Trocear una lista con linq RRS feed

  • Pregunta

  • Que tal chicos?,

    Mi problema es el siguiente, quiero desarrollar utilizando linQ, a ser posible, una manera limpia y rápid a para poder realizar los siguiente:

    - Tengo una lista de entidades con un gran número de registro.

    - A partir de ella tengo que generar otra lista en la que crearé un registro cada vez que me encuentre un cero en uno de los parámetros de la entidad.

    - Para crear el registro tendré que coger la fecha inicial que contenga el primero del conjunto de registro hasta que encontré el cero y la fecha final del registro último registro antes del cero.

    - El siguiente registro a crear, cogerá la fecha inicial del registro que tiene un cero en sus parámetros y la fecha final del último registro antes del siguiente cero.

    - Así con toda la lista hasta que se terminen los registros y cogeré para crear el último registro la fecha final del último registro.

    Creo que si utilizara varios bucles lo podría sacar pero me gustaría ir más allá y profundizar con linq u otra herramienta

    Cualquier información con la que me podáis indicar el camino será bienvenida.

    un saludo y muchas gracias.

    jueves, 9 de abril de 2015 17:01

Todas las respuestas

  • hola

    >>quiero desarrollar utilizando linQ, a ser posible,

    cuando dices linq te refieres a Entity Framework, o es una lista en memoria que sale de algun lugar

    >>cada vez que me encuentre un cero en uno de los parámetros de la entidad

    por parametro te refieres a una propiedad de la entidad ?

    >>tendré que coger la fecha inicial que contenga el primero del conjunto

    o sea estas agrupando por alguna propiedad para poder determinar el conjunto ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 9 de abril de 2015 17:28
  • Muy buenas Leandro,

    Creo que has acertado en las tres cosas. Efectivamente estoy utilizando Entity framework para acceder a los registros de la base de datos, pero esto ya sería una lista que he añadido previamente con unas entidades que me he creado ordenada por origen, destino y por último la fecha. También cuando digo parámetro quería referirme a la propiedad RATE, en el caso de que esta sea cero, indica el final de un conjunto de registro, por lo tanto se agregaría una única nueva entidad a la nueva lista lista que devolveremos.

    Ejemplo de la lista inicial, me expliqué mal en el primer comentario ya que la lista inicial solo va a  tener una fecha. Lo he editado para que aparezca correctamente.

    Cuando encontremos un rate a cero, se utiliza como un marcador para indicar que llega el final de un conjunto y que hay insertar un registro en la lista a devolver. Para crear dicho registro se asocia la fecha inicial a la fecha del primer registro y la fecha final a la fecha del último registro. El siguiente registro a crear llevará como fecha inicial la fecha del registro con cero y fecha final la fecha del último registro. En el momento que se tenga un origen o un destino distinto se entiende también que hay que crear un registro en la nueva tomando como fecha final la fecha del último registro.

    Creo que en este ejemplo lo veréis más claro.

      

    Origen  Destino          Fecha          Rate

      A             B             20-03-2015         43
      A             B             21-03-2015         23

      A             B             25-03-2015         0
      A             B             27-03-2015        232


      A             B             29-03-2015          0 


      B             C             12-03-2015          4

      B             C             15-03-2015          4



      En este caso tendríamos que agregar 3 objetos a la nueva lista que serían:

    Origen   Destino     Fecha_Inicio   Fecha_Final


      A             B             20-03-2015      21-03-2015    

      A             B             25-03-2015      27-03-2015    

      B             C            12-03-2015       15-03-2015   

    viernes, 10 de abril de 2015 8:46