Aspnet Linq

Linq è l’acronimo di Language Integraqted Query, in parole molto semplici con lo stesso codice è possibile elaborare ed effettuare query su diverse fonti di dati

Il cuore di LINQ è composto da una seiri di API che spicecano come un object model possa essere interrogato, queste API si occupano di gestire e rendere frubili metodologie d’interrogazioni gia’ conosciuter.

I Componenti di LINQ

  • /server Indica il nome del server
  • /database indica il nome del database
  • /user:<name> indica la username con cui collegarsi al database
  • /password indica la password associata al valore di user
  • /contex:<type) il nome della classe di defautl viene utilizzato il nome del database ac ui si desidera collegarsi
  • /serialization:<opzioni> Genera classi serializzabili, le opzioni dispoinibili da associare a l comando sono nome e Unidirectional

Programmare LINQ

Aspnet Linq

Al fine d’integrare LINQ all’interno de framewrok net sono state aggiunte deu nuove parole chiave che sono rispettivamente

  • var
  • from

a queste sono state associate una lista di keyword che le vanno a comporre

  • where
  • orderby
  • in
  • join
  • group
  • select

vediamo subito un primo esempio per il momento senza utilizzare il database.

Class program {


 

static void Main (string[] args)

{

int [] nums = {
5,4 , 3, 2, 1,
};

var AddOne = from n in nums select n +1;

foreach (var i in addOne) {


Console.WriteLine(i);
}

Console.ReadKey();


}
}

Se per esempio vogliamo selezionari solo i valori inferiori a 5 ed in ordine decrescente dobbiamo fare

Class program {


 

static void Main (string[] args)

{

int [] nums = {
5,4 , 3, 2, 1,
};

var AddOne = from n in nums

where n<5

orderby n descending

select n +1;

foreach (var i in addOne) {


Console.WriteLine(i);
}

Console.ReadKey();


}
}

 

Collegamento LINQ a Database

Vediamo adesso come rendere possibile il collegamento al database desiderato utilizzando il seguente codice

using System:

using System.Linq;

using System.Data.Linq;

using nwind;

Nortwind db =new Northwind (@ "Data Source=\SQLEXPRESS; Initial Catalog = NorthWind");

var custs = from c in db.Customers

where c.City== "London"

select c;

foreach (var cust in custs) {


 

Console.WriteLine ("{0}", cust.CompanyName);
}

A questo punto è possibile fare le query a Database

,a vedoa,p tutte le possibili opzioni che permette il Linq

Linq to Objects
esegue delle query su array che sono presenti in memoria
Linq to XML
permette di accedere a XML utilizzando i Doom
Linq to DataSet
permette appunto a LINQ di operare tramite i DataSet
Linq to Sql
Con questo sistema si permette a LINQ di accedere a SQL SERVER
Linq to Entites
scollega il database da un qualsiasi object model

 

 

 

Lambda Expression , Expression Tree

Il linguaggio LINQ è stato introdotto grazie alle specifiche di tre linguaggi che sono stati integrati, linguaggi e motodi di programmazione per la precisione.

Lambda Expression

Le espressioni Lambda esistono dal 1930 e sono dovute al merito del Matemoatico Alonzo Church. Si basano sul lettore lambda

=>

che letteralmente significa vai a. Il lato sinistro dell’operatore lambda specifica i parametri di input se presenti e il lato destro coniente l’espressione o il blogcco di istruzioni, facciamo subito un esempio pratico. L’espressione lambda

x => x * x

si legge x fino a x per x

facciamo un esempio chiarificatore di quanto queste espressioni semplifichino la vita del programmatore supponiamo di avere in cs i seguenti tre delegate

delegate int Sum( int a , int b);

delegate T MyFunc <T> (T a, T b);

delegate void InvokeMethod();

se si volesse aggiungere la somma di due valori a questo punto in cs dovremmo fare

Sum sd0= new Sum (CalcSum);

sd0=CalcSum;

int val =sd0(4,5);

private int CalcSum (int a, int b)

{

return a+b; 3:;
}

e grazie appunto l’introduzione dei Lambda il tutto diventa riassumibile come

Sum sd0= (int a, int b) => { return a+b;
}

Expression Tree

Una lambda espression viene definita attraverso le Expression Tree cioe’ le classi Expression <T> , vediamo subito come attraverso un esempio

Ripartiamo dall’esempio fatto sopra

Sum sd0= (a,b) => (a+b);

Per utilizzarla attraverso le expression tree il codice diventa

Expression<Func<int, int, int>> expression =(a,b) => a+bM

ret =expression.Compile()(4,5)

Partial Method

Le partial method di fatto le abbiamo incontrare sempre durante questa nostra esperienza in aspnet e si tratta di uno dei metodi piu’ vincenti della tecnologia di questo framework

Ossia da Aspnet 2.0 in poi è possibile separare in fiel diversi l’implementazione di una classe marcandola per l’appunto con l’attributo partial in questo modo avremmo due classi con lo stesso nome che vengono lette dal complilatore come un’unica classe, alleggerendo cosi’ la complessità per il programmatore, guardiamo subito come:

partial class Cliente {

string _name;

string Name

{

get {
return_name;;
}

set {_name= value;
}
}

Dopo possiamo tranquillamente aggiungere altre informazioni in un altro file

partial class Cliente {
string GetXYZ {

Codice aggiuntivo
}
}