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.