LINQ - Objetos

LINQ to Objects oferece o uso de qualquer consulta LINQ com suporte a IEnumerable <T> para acessar coleções de dados na memória sem a necessidade de provedor LINQ (API) como no caso de LINQ to SQL ou LINQ to XML.

Introdução do LINQ para objetos

As consultas em LINQ to Objects retornam variáveis ​​do tipo geralmente apenas IEnumerable <T>. Em suma, LINQ to Objects oferece uma nova abordagem para coleções, pois era vital escrever uma codificação longa (loops foreach de muita complexidade) para recuperação de dados de uma coleção que agora é substituída pela escrita de código declarativo que descreve claramente os dados desejados que é necessário para recuperar.

Existem também muitas vantagens do LINQ to Objects sobre os loops foreach tradicionais, como maior legibilidade, filtragem poderosa, capacidade de agrupamento, ordenação aprimorada com codificação de aplicativo mínima. Essas consultas LINQ também são mais compactas por natureza e são portáteis para quaisquer outras fontes de dados sem qualquer modificação ou com apenas uma pequena modificação.

Abaixo está um exemplo simples 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();
      }
   }
}

No exemplo, uma matriz de strings (ferramentas) é usada como a coleção de objetos a serem consultados usando LINQ to Objects.

Objects query is:
var list = from t in tools select t;

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Tablesaw
Bandsaw
Planer
Jointer
Drill
Sander

Consultando coleções de memória usando 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

Quando o código acima de C # ou VB é compilado e executado, ele produz o seguinte resultado -

Department Id = 1, Department Name = Account
Department Id = 2, Department Name = Sales
Department Id = 3, Department Name = Marketing

Press any key to continue.