[C#] Consulta con libreria LINQ

Iniciado por Siuto, 21 Diciembre 2009, 04:44 AM

0 Miembros y 1 Visitante están viendo este tema.

Siuto

Como accedo a los objetos del grupo creado con una consulta de este tipo...

Código (csharp) [Seleccionar]

var pares =
    from carta in this
    group carta by carta.Valor into grupo
    where grupo.Count() >= 2
    //orderby grupo.Key descending
    select grupo.Key;


carta.Valor es un entero, pongo solo este fragmento de codigo porque creo que se entiende bien.

En todos los ejemplos que encuentro por internet para accedere a la consulta lo hacen por medio de dos ciclos foreach() anidados, pero yo quiero necesito eso, solo quiero ver los valores del primer entero y del segundo (o el ultimo).

dokko

Buenas, no entiendo lo que quieres hacer exactmente. Porque hablas de 2 valores y solo devuelves uno.  Perdona, he trabajado bastante con LINQ pero nunca habia visto el uso Group, intuyo algo de su eso, pero es nueva para mi. Si me explicas exactamente que quieres hacer y el uso  que le das a group miraria de ayudarte.

Saludos

MANULOMM

Bueno
1. EXCELENTE que se empieze a ver LINQ en este foro.
2. A tu duda:
estas retornando los valores que cumplen con la consulta a un var llamado pares, estas agrupamdo por carta.valor siempre y cuando grupo tenga mas o solo dos elementos.
y estas guardando el key de los elementos en pares por lo cual pares es un objecto que implementa IEnumarable<T> donde T es el tipo de grupo.Key
para obentener los valores lo que se hace es recorrerlos pues como te dije implementan IEnumerable<T> para obtener el primero puedes llamar al metodo de extension First() este te retornada un valor del tipo de T de la coleccion osea el tipo de grupo.Key si la coleccion no tiene valores esta función lanzara una excepción para evitar esto puedes llamar a FirstOrDefault() el cual retorna el primero como la funcion First() pero si la coleccion esta vacia retornara el valor por defecto del tipo por ejemplo si el tipo es un String retornara String.Empty si es un Guid retornara Guid.Empty y si el tipo no tiene valor por defecto retornara null.
Para obtener otros valores como el segundo el ultimo debes convertir el var en un List o cualquier otro tipo que implemente IEnumerable<T> y lo buscas por el indice.

Espero te sirva.
NO te puese codigo pues estoy en una maquina sin IDE.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia