LINQ - Objetos
LINQ to Objects ofrece el uso de cualquier consulta LINQ que admita IEnumerable <T> para acceder a colecciones de datos en memoria sin necesidad de un proveedor LINQ (API) como en el caso de LINQ to SQL o LINQ to XML.
Introducción de LINQ to Objects
Las consultas en LINQ to Objects devuelven variables de tipo normalmente solo IEnumerable <T>. En resumen, LINQ to Objects ofrece un enfoque nuevo para las colecciones como antes, era vital escribir codificación larga (bucles foreach de mucha complejidad) para la recuperación de datos de una colección que ahora se reemplaza por escribir código declarativo que describa claramente los datos deseados. que se requiere para recuperar.
También hay muchas ventajas de LINQ to Objects sobre los bucles foreach tradicionales, como más legibilidad, filtrado potente, capacidad de agrupación, ordenación mejorada con codificación mínima de aplicaciones. Estas consultas LINQ también son de naturaleza más compacta y se pueden transferir a cualquier otra fuente de datos sin ninguna modificación o con solo una pequeña modificación.
A continuación se muestra un ejemplo simple de LINQ to Objects:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQtoObjects {
class Program {
static void Main(string[] args) {
string[] tools = { "Tablesaw", "Bandsaw", "Planer", "Jointer", "Drill", "Sander" };
var list = from t in tools select t;
StringBuilder sb = new StringBuilder();
foreach (string s in list) {
sb.Append(s + Environment.NewLine);
}
Console.WriteLine(sb.ToString(), "Tools");
Console.ReadLine();
}
}
}
En el ejemplo, una matriz de cadenas (herramientas) se usa como la colección de objetos que se consultarán usando LINQ to Objects.
Objects query is:
var list = from t in tools select t;
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:
Tablesaw
Bandsaw
Planer
Jointer
Drill
Sander
Consulta en colecciones de memoria mediante LINQ to Objects
C#
using System;
using System.Collections.Generic;
using System.Linq;
namespace LINQtoObjects {
class Department {
public int DepartmentId { get; set; }
public string Name { get; set; }
}
class LinqToObjects {
static void Main(string[] args) {
List<Department> departments = new List<Department>();
departments.Add(new Department { DepartmentId = 1, Name = "Account" });
departments.Add(new Department { DepartmentId = 2, Name = "Sales" });
departments.Add(new Department { DepartmentId = 3, Name = "Marketing" });
var departmentList = from d in departments
select d;
foreach (var dept in departmentList) {
Console.WriteLine("Department Id = {0} , Department Name = {1}",
dept.DepartmentId, dept.Name);
}
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey();
}
}
}
VB
Imports System.Collections.Generic
Imports System.Linq
Module Module1
Sub Main(ByVal args As String())
Dim account As New Department With {.Name = "Account", .DepartmentId = 1}
Dim sales As New Department With {.Name = "Sales", .DepartmentId = 2}
Dim marketing As New Department With {.Name = "Marketing", .DepartmentId = 3}
Dim departments As New System.Collections.Generic.List(Of Department)(New Department() {account, sales, marketing})
Dim departmentList = From d In departments
For Each dept In departmentList
Console.WriteLine("Department Id = {0} , Department Name = {1}", dept.DepartmentId, dept.Name)
Next
Console.WriteLine(vbLf & "Press any key to continue.")
Console.ReadKey()
End Sub
Class Department
Public Property Name As String
Public Property DepartmentId As Integer
End Class
End Module
Cuando el código anterior de C # o VB se compila y ejecuta, produce el siguiente resultado:
Department Id = 1, Department Name = Account
Department Id = 2, Department Name = Sales
Department Id = 3, Department Name = Marketing
Press any key to continue.