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.