Scrittura di query in C# LINQ

Scrittura Di Query In C Linq



Analogamente a SQL, è possibile scrivere query in C# LINQ utilizzando la sintassi delle query. Queste query vengono utilizzate nelle applicazioni di database C# sul Web per ottenere i dati dal database e visualizzarli sul Web agli utenti di terze parti. In questa guida, discuteremo alcune query LINQ simili a SQL. Per questo, creeremo un'origine dati elenco e applicheremo le query in esso contenute.

Sintassi della query:

Diamo un'occhiata alla sintassi generica:

da iteratore In Fonte di dati
Selezionare iteratore ;

Qui:







  1. Data_Source può essere l'elenco che contiene i dati.
  2. L'iteratore viene utilizzato per recuperare gli elementi da Data_Source.

Fonte di dati

In questa intera guida, utilizzeremo il seguente elenco di record come origine dati e tutte le query vengono applicate solo a questa origine dati. Assicurati di eseguire questo codice nel tuo ambiente e modifica le istruzioni di query con i seguenti esempi uno per uno di cui parleremo:



utilizzando Sistema ;
utilizzando System.Collections.Generic ;
utilizzando System.Linq ;
utilizzando System.Collections ;

pubblico classe Calcoli
{
pubblico statico vuoto Principale ( )
{
// Creazione elenco
Elenca country_prices = nuovo Elenco ( ) {

// Aggiungi 5 record in List
nuovo Prezzi ( ) { articolo = 'Frutta' ,posizione = 'STATI UNITI D'AMERICA' , quantità = 100 , costo = 345,78 } ,
nuovo Prezzi ( ) { articolo = 'Noccioline' ,posizione = 'India' , quantità = 200 , costo = 3645,78 } ,
nuovo Prezzi ( ) { articolo = 'Altri' ,posizione = 'UK' , quantità = 500 , costo = 90,68 } ,
nuovo Prezzi ( ) { articolo = 'olio' ,posizione = 'STATI UNITI D'AMERICA' , quantità = 100 , costo = 345,78 } ,
nuovo Prezzi ( ) { articolo = 'peperoncini' ,posizione = 'STATI UNITI D'AMERICA' , quantità = 10 , costo = 67,89 } ,
} ;


per ciascuno ( era io In country_prices )
{
Consolle . Linea di scrittura ( io . articolo + ' ' + io . posizione + ' ' + io . quantità + ' ' + io . costo ) ;
}
}
}
pubblico classe Prezzi {
pubblico corda articolo { Ottenere ; impostato ; }
pubblico corda posizione { Ottenere ; impostato ; }
pubblico int quantità { Ottenere ; impostato ; }
pubblico Doppio costo { Ottenere ; impostato ; }
}

Record:







Spiegazione:

1. Crea i prezzi con i seguenti attributi:

2. Crea un'altra classe che è 'Calculations' con il metodo main e crea l'elenco country_prices con cinque record.



Selezionare

Fondamentalmente, 'select' è un operatore di proiezione che seleziona gli attributi dall'origine dati specificata. La query inizia con 'da'. Quindi, specifichiamo l'iteratore che itera sull'origine dati. Quindi, viene specificato l'operatore 'select'.

Sintassi:

Tutti gli attributi: da iteratore in Data_Source seleziona iteratore;

Attributo specifico: da iteratore in Data_Source selezionare iterator.attribute;

Esempio 1:

Scriviamo una query per selezionare tutti i record dall'elenco.

utilizzando Sistema ;
utilizzando System.Collections.Generic ;
utilizzando System.Linq ;
utilizzando System.Collections ;

pubblico classe Calcoli
{
pubblico statico vuoto Principale ( )
{
// Creazione elenco
Elenca country_prices = nuovo Elenco ( ) {

// Aggiungi 5 record in List
nuovo Prezzi ( ) { articolo = 'Frutta' ,posizione = 'STATI UNITI D'AMERICA' , quantità = 100 , costo = 345,78 } ,
nuovo Prezzi ( ) { articolo = 'Noccioline' ,posizione = 'India' , quantità = 200 , costo = 3645,78 } ,
nuovo Prezzi ( ) { articolo = 'Altri' ,posizione = 'UK' , quantità = 500 , costo = 90,68 } ,
nuovo Prezzi ( ) { articolo = 'olio' ,posizione = 'STATI UNITI D'AMERICA' , quantità = 100 , costo = 345,78 } ,
nuovo Prezzi ( ) { articolo = 'peperoncini' ,posizione = 'STATI UNITI D'AMERICA' , quantità = 10 , costo = 67,89 } ,
} ;

//operatore di selezione nella query
era dati = da io In country_prices
Selezionare io ;

per ciascuno ( era io In dati )
{
Consolle . Linea di scrittura ( io . articolo + ' ' + io . posizione + ' ' + io . quantità + ' ' + io . costo ) ;

}
}
}
pubblico classe Prezzi {
pubblico corda articolo { Ottenere ; impostato ; }
pubblico corda posizione { Ottenere ; impostato ; }
pubblico int quantità { Ottenere ; impostato ; }
pubblico Doppio costo { Ottenere ; impostato ; }
}

Produzione:

Qui, non abbiamo specificato alcun attributo nella query 'select'. Abbiamo recuperato tutti gli attributi dalla query (dati) all'interno del ciclo 'foreach' utilizzando l'iteratore.

Esempio 2:

Ora, ottieni gli articoli specificando l'attributo dell'articolo all'interno dell'operatore 'seleziona'. La query è  ' da i in country_prices selezionare i.item ”.

// seleziona l'operatore per ottenere l'attributo dell'elemento nella query
era dati = da io In country_prices
Selezionare io . articolo ;

per ciascuno ( era io In dati )
{
Consolle . Linea di scrittura ( io ) ;

}

Produzione:

Riga #21 – Riga #29:

2. Dove

Se si desidera filtrare i dati in base a determinate condizioni, è possibile utilizzare l'operatore 'where' nella query insieme alla clausola 'select'. Ma prima viene utilizzato l'operatore 'where', quindi viene specificato l'operatore select.

Sintassi:

Vediamo come utilizzare l'operatore 'where' all'interno della query LINQ.

da iteratore In Fonte di dati
Dove condizione / S
Selezionare iteratore . attributo ;

Esempio 1: Condizione singola

Filtriamo i record in base all'attributo dell'articolo. Utilizzare l'operatore uguale a (==) nell'operatore 'where' come condizione e confrontare l'iteratore con 'Chillies'. Quindi, vengono selezionati i record correlati a 'Chillies'.

La domanda è ' da i in country_prices
dove i.item == “peperoncini”
seleziona io'

//seleziona con dove filtrare i record
era dati = da io In country_prices
Dove io . articolo == 'peperoncini'
Selezionare io ;

per ciascuno ( era io In dati )
{
Consolle . Linea di scrittura ( io . articolo + ' ' + io . posizione + ' ' + io . quantità + ' ' + io . costo ) ;

}

Produzione:

C'è solo un record con l'elemento 'Chillies'.

Riga #21 – Riga #30:

Esempio 2: Molteplici condizioni

Filtriamo i record in base agli attributi di posizione e quantità. La quantità deve essere maggiore di 50 e minore di 300. La posizione deve essere 'USA'.

La domanda è ' da i in country_prices
dove i.quantità > 50
dove i.quantità < 300
dove i.location == “USA”
seleziona io'

//seleziona con dove filtrare i record specificando più condizioni
era dati = da io In country_prices
Dove io . quantità > cinquanta
Dove io . quantità < 300
Dove io . posizione == 'STATI UNITI D'AMERICA'
Selezionare io ;

per ciascuno ( era io In dati )
{
Consolle . Linea di scrittura ( io . articolo + ' ' + io . posizione + ' ' + io . quantità + ' ' + io . costo ) ;

}

Produzione:

Sono presenti due record che soddisfano le condizioni precedenti.

Riga #21 – Riga #32:

Esempio 3: E (&&) Operatore

Possiamo specificare l'operatore 'and (&&)' per specificare più condizioni alla volta. Se tutte le condizioni sono vere, la query restituisce i record che soddisfano tutte le condizioni.

In questo esempio, selezioniamo i record se la quantità è maggiore di 20 e il costo è 67,89.

La domanda è ' da i in country_prices
dove i.quantità < 20 && i.costo == 67,89
seleziona io'

era dati = da io In country_prices
Dove io . quantità < venti && io . costo == 67,89
Selezionare io ;

per ciascuno ( era io In dati )
{
Consolle . Linea di scrittura ( io . articolo + ' ' + io . posizione + ' ' + io . quantità + ' ' + io . costo ) ;

}

Produzione:

C'è solo un record con la quantità inferiore a 20 e un costo di 67,89

Riga #21 – Riga #29:

Esempio 4: Oppure (||) Operatore

L'operatore 'or (||)' viene utilizzato anche per specificare più condizioni alla volta. Se almeno una condizione è vera, vengono restituiti i record che soddisfano tale condizione.

In questo esempio selezioniamo i record se la quantità è maggiore di 300 o se la località è “Tokyo”.

La domanda è ' da i in country_prices
dove i.quantità > 300 || i.location == “Tokyo”
seleziona io'

era dati = da io In country_prices
Dove io . quantità > 300 || io . posizione == 'Tokyo'
Selezionare io ;

per ciascuno ( era io In dati )
{
Consolle . Linea di scrittura ( io . articolo + ' ' + io . posizione + ' ' + io . quantità + ' ' + io . costo ) ;

}

Produzione:

Esiste un solo record con una quantità maggiore di 300 (la prima condizione è soddisfatta).

Riga #21 – Riga #29:

3. Ordina per

Se si desidera disporre i record restituiti dalla query LINQ in ordine crescente o decrescente in base ai valori in uno qualsiasi degli attributi, è possibile utilizzare l'operatore 'ordina per' nella query. È necessario specificare questo operatore prima dell'operatore 'seleziona'.

Sintassi:

Vediamo come utilizzare l'operatore 'ordina per' all'interno della query LINQ.

Ordine ascendente:

da iteratore In Fonte di dati
ordine di iteratore . attributo ascendente
Selezionare iteratore ;

Ordine decrescente:

da iteratore In Fonte di dati
ordine di iteratore . attributo discendente
Selezionare iteratore ;

Esempio 1: Ordine ascendente

Selezionare tutti gli attributi dall'origine dati (elenco) e restituirli in ordine crescente in base ai valori nell'attributo quantità.

La domanda è ' da i in country_prices
orderby i.quantity ascendente
seleziona io'

era dati = da io In country_prices
ordina per i . quantità ascendente
Selezionare io ;

per ciascuno ( era io In dati )
{
Consolle . Linea di scrittura ( io . articolo + ' ' + io . posizione + ' ' + io . quantità + ' ' + io . costo ) ;

}

Produzione:

Riga #21 – Riga #29:

Esempio 2: Ordine decrescente

Selezionare tutti gli attributi dall'origine dati (elenco) e restituirli in ordine decrescente in base ai valori nell'attributo cost.

La domanda è ' da i in country_prices
orderby i.cost decrescente
seleziona io'

era dati = da io In country_prices
ordina per i . costo discendente
Selezionare io ;

per ciascuno ( era io In dati )
{
Consolle . Linea di scrittura ( io . articolo + ' ' + io . posizione + ' ' + io . quantità + ' ' + io . costo ) ;

}

Produzione:

Riga #21 – Riga #29:

4. Limite

Limit in SQL limita i record restituiti dalla query. Restituisce i primi record restituiti dalla query. In LINQ, possiamo ottenere questo risultato utilizzando Skip() con l'operatore Take(). Take() ottiene il numero specificato di record. Skip() viene utilizzato per specificare il numero di record iniziale. In questo modo, possiamo ottenere la funzionalità 'limite' in LINQ.

Sintassi:

( da iteratore In Fonte di dati
Selezionare iteratore ) . Saltare ( N ) . Prendere ( N ) ;
  1. Skip() viene utilizzato per ignorare i record e restituire i record rimanenti. Prende un numero intero che specifica il numero di elementi da saltare. Nel nostro caso è 0.
  2. Take() viene utilizzato per prendere 'n' numero di record dal primo record.

Esempio:

Selezionare i primi tre record su cinque record restituiti dalla query.

La domanda è ' (da i in country_prices
selezionare i).Skip(0).Take(3)”

era dati = ( da io In country_prices
Selezionare io ) . Saltare ( 0 ) . Prendere ( 3 ) ;

per ciascuno ( era io In dati )
{
Consolle . Linea di scrittura ( io . articolo + ' ' + io . posizione + ' ' + io . quantità + ' ' + io . costo ) ;

}

}

Produzione:

Riga #21 – Riga #28:

Conclusione

Abbiamo imparato a scrivere le query in C# LINQ che è simile a SQL. Come parte di questa esercitazione, abbiamo discusso su come utilizzare l'operatore 'select' per selezionare i record dall'origine dati. Per filtrare i record che vengono restituiti dalla query, abbiamo utilizzato l'operatore “where” specificando le condizioni. Quindi, abbiamo imparato come ordinare i record restituiti dalla query con l'operatore 'ordina per'. Infine, per limitare i record, abbiamo utilizzato gli operatori Skip() e Take().