public static void Linq1() { int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; var lowNums = from n in numbers where n < 5 select n; Console.WriteLine("Numbers < 5:"); foreach (var x in lowNums) { Console.WriteLine(x); } } |
public static void LinqSum1() { int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; double numSum = numbers.Sum(); Console.WriteLine("La suma de los numeros es: {0}.", numSum); } |
double numSum = numbers.Where(n =>; n > 5).Sum(); |
public static void LinqOrderBy() { List<Producto> productos = GetProductList(); var sortedProducts = from p in productos where p.Categoria = "2" orderby p.Cantidad descending select p; } |
En este filtramos todos los productos cuya categoría sea “2“ y lo ordenamos en orden descendente por la propiedad Cantidad.
Compliquemos un poco más la consulta de forma que tome los datos de 2 listas distintas y devuelva un conjunto de elementos anónimos.
public static void LinqJoin() { List<Producto> productos = GetProductList(); List<Categoria> categorias = GetCategoryList(); var elementos = from p in productos join c in categorias on p.Categoria equals c.Categoria where p.Categoria = "2" orderby p.Cantidad descending select new { ProductoNombre = p.Descripcion, ProductoNombre = p.Descripcion, Existencia = p.Cantidad }; } |
En este ejemplo vemos como se relacionan las dos listas de elementos por el campo común “Categoria” y se obtiene como resultado una lista de “elementos” que es además de tipo anónimo.
LINQ “ANY"
Veamos un ejemplo. Imaginemos que tengo un:
String[n] pricesType, que contiene una lista o array de los distintos tipos de precios de un determinado elemento. Y quiero saber si un determinado tipo de precio esta en dicha lista (por ejemplo el tipo de precio "L").
Para ello podría usar Any de la siguiente manera:
bool result = pricesType.Any(s => s.Contains("L")); |
//o también |
bool result = pricesType.Any(s => s == "L"); |
RESUMEN LINQ TO OBJECT
Con esta lista de ejemplos he intentado trasmitir la idea básica de LINQ to Object, espero les halla sido de ayuda.
Las consultas LINQ ofrecen tres ventajas principales respecto a los bucles foreach tradicionales:
- Son más concisas y legibles, sobre todo al filtrar varias condiciones.
-
Proporcionan funcionalidad eficaz de filtrado, ordenación y agrupación con código de aplicación mínimo.
-
Se pueden trasladar a otros orígenes de datos con pocas o ningunas modificaciones.
En general, cuanto más compleja sea la operación que se deba realizar con los datos, observará un número mayor de ventajas al utilizar LINQ en lugar de las técnicas de iteración convencionales.
Notas:
En unos días continuaré escribiendo sobre LINQ, profundizaré LINQ to SQL y LINQ to XML, que son los dos temas, además de LINQ to Object que más me han solicitado; si tienes algún interés particular no dudes en dejarme tú comentario o enviarme un mail.
Puede utilizar LINQ para consultar cualquier colección enumerable, como List<(Of <(T>)>), Array o Dictionary<(Of <(TKey, TValue>)>). La colección puede estar definida por el usuario o ser devuelta por una API de .NET Framework.
Artículos Relacionados:
result =
ResponderEliminar( from s in txtExcludeCompany.Text.Split(';')
where !string.IsNullOrEmpty(s)
select s.Trim()
).ToList();
Con este ejemplo devolvemos una lista de "String" con todas las oraciones o palabras que aparecen en "txtExcludeCompany" y que estan separadas por ";"
Hola, he revisado el blog y quiero compartir con ustedes tres variantes de implementacion de la funcion Existe() y siguiendo los ejemplos de un listado de Categorias que en mi caso contendria un listado de sus productos y agrego esta funcion dentro de la clase categoria para saber si existe entre sus Productos aquel que contenga en su nombre "Revista":
ResponderEliminar//Implementacion Variante#1
public bool Existe()
{
//Lista de Categorias
categorias = GetCategoryList();
return ((from itemCategoria in categorias
where (itemCategoria.Productos != null) && (itemCategoria.Productos.NombreProducto.Contains("Revista"))
select itemCategoria).Count() != 0);
}
//Implementacion Variante#2
public bool Existe()
{
//Lista de Categorias
categorias = GetCategoryList();
return (categorias.Where(itemCategoria =>
(itemCategoria.Productos != null) && (itemCategoria.Productos.NombreProducto.Contains("Revista"))).Count() != 0);
}
//Implementacion Variante#3
public bool Existe()
{
//Lista de Categorias
categorias = GetCategoryList();
return (categorias.Any(itemCategoria =>
(itemCategoria.Productos != null) && (itemCategoria.Productos.NombreProducto.Contains("Revista"))));
}
Quiero que vean que si analizamos la variante 1 y 2 recorren el listado completo de Productos y luego con la funcion Count aplicado al listado resultado es que podemos devolver: verdadero o falso. Sin embargo, usando el Any tan solo al encontrar el primero que cumpla la condicion devolveriamos: verdadero.
Espero, siempre que tengan un caso como este pues usen la funcion Any...
Mis saludos,
drachelita
Este comentario ha sido eliminado por el autor.
ResponderEliminarHola, les muestro el uso de la función Select para un listado de elementos:
ResponderEliminarprivate static string ConvertArrayToString(string[] lista,string separador)
{
return string.Concat(lista.Select(item => item + separador).ToArray());
}
Esta función que he implementado devuelve una cadena formada por los elementos de una lista unidos por un separador.
Les mostrare un ejemplo en la que se puede utilizar:
protected string DevuelveTitulo()
{
string[] listaCategorias = new string[3] { "ADM", "INF", "TEL" };
string categorias = ConvertArrayToString(listaCategorias, ",");
return "Categorías en exposición: " + categorias.Substring(0, categorias.Length - 1);
}
ayuda con sta consulta en sql y no se como pasarl a linq :
ResponderEliminarSELECT LocalidadId, COUNT(*)[Productores] , SUM (FertilizanteId)[PaqEntregados] , SUM (BultosSA)[TotalBultosSA] , SUM (BultosDAP)[TotalBultosDAP] , SUM (BultosSA*0.05)[TotalTonSA] , SUM (BultosDAP*0.05)[TotalTonDAP] , SUM (BultosBIO)[TotalBIOPaq]
FROM Productores
WHERE LocalidadId = LocalidadId
Group By LocalidadId