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.