Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Siuto en 21 Diciembre 2009, 04:44 am



Título: [C#] Consulta con libreria LINQ
Publicado por: Siuto en 21 Diciembre 2009, 04:44 am
Como accedo a los objetos del grupo creado con una consulta de este tipo...

Código
  1. var pares =
  2.    from carta in this
  3.    group carta by carta.Valor into grupo
  4.    where grupo.Count() >= 2
  5.    //orderby grupo.Key descending
  6.    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).


Título: Re: [C#] Consulta con libreria LINQ
Publicado por: dokko en 4 Enero 2010, 21:51 pm
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


Título: Re: [C#] Consulta con libreria LINQ
Publicado por: MANULOMM en 5 Enero 2010, 00:19 am
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