LINQ - Oggetti
LINQ to Objects offre l'utilizzo di qualsiasi query LINQ che supporta IEnumerable <T> per accedere a raccolte di dati in memoria senza la necessità di un provider LINQ (API) come nel caso di LINQ to SQL o LINQ to XML.
Introduzione di LINQ to Objects
Le query in LINQ to Objects restituiscono variabili di tipo in genere solo IEnumerable <T>. In breve, LINQ to Objects offre un nuovo approccio alle raccolte come in precedenza, era fondamentale scrivere una lunga codifica (cicli foreach di grande complessità) per il recupero dei dati da una raccolta che ora viene sostituita dalla scrittura di codice dichiarativo che descrive chiaramente i dati desiderati che è necessario per recuperare.
Ci sono anche molti vantaggi di LINQ to Objects rispetto ai tradizionali cicli foreach come maggiore leggibilità, filtri potenti, capacità di raggruppamento, ordinamento migliorato con una codifica minima dell'applicazione. Tali query LINQ sono anche di natura più compatta e sono portabili su qualsiasi altra origine dati senza alcuna modifica o con una piccola modifica.
Di seguito è riportato un semplice esempio di 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();
}
}
}
Nell'esempio, una matrice di stringhe (strumenti) viene utilizzata come raccolta di oggetti da interrogare utilizzando LINQ to Objects.
Objects query is:
var list = from t in tools select t;
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
Tablesaw
Bandsaw
Planer
Jointer
Drill
Sander
Esecuzione di query nelle raccolte di memoria tramite 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 il codice precedente di C # o VB viene compilato ed eseguito, produce il seguente risultato:
Department Id = 1, Department Name = Account
Department Id = 2, Department Name = Sales
Department Id = 3, Department Name = Marketing
Press any key to continue.