Escriptura de consultes en C# LINQ

Escriptura De Consultes En C Linq



De manera similar a SQL, és possible escriure consultes en C# LINQ mitjançant la sintaxi de consulta. Aquestes consultes s'utilitzen a les aplicacions de bases de dades C# al web per obtenir les dades de la base de dades i mostrar-les al web als usuaris de tercers. En aquesta guia, parlarem d'algunes consultes LINQ que són similars a SQL. Per a això, crearem una font de dades de llista i aplicar-hi les consultes.

Sintaxi de la consulta:

Vegem la sintaxi genèrica:

des de iterador en Font de dades
seleccionar iterador ;

Aquí:







  1. Data_Source pot ser la llista que conté les dades.
  2. L'iterador s'utilitza per obtenir els elements de Data_Source.

Font de dades

En tota aquesta guia, utilitzarem la següent llista de registres com a font de dades i totes les consultes només s'apliquen a aquesta font de dades. Assegureu-vos d'executar aquest codi al vostre entorn i modifiqueu les declaracions de consulta amb els exemples següents un per un dels quals parlarem:



utilitzant Sistema ;
utilitzant System.Collections.Generic ;
utilitzant System.Linq ;
utilitzant Sistema.Col·leccions ;

públic classe Càlculs
{
públic estàtica buit Principal ( )
{
// Creació de llista
Llista de preus_país = nou Llista ( ) {

// Afegeix 5 registres a la llista
nou Preus ( ) { article = 'Fruites' ,ubicació = 'EUA' , quantitat = 100 , cost = 345.78 } ,
nou Preus ( ) { article = 'Nous' ,ubicació = 'Índia' , quantitat = 200 , cost = 3645.78 } ,
nou Preus ( ) { article = 'Altres' ,ubicació = 'UK' , quantitat = 500 , cost = 90.68 } ,
nou Preus ( ) { article = 'oli' ,ubicació = 'EUA' , quantitat = 100 , cost = 345.78 } ,
nou Preus ( ) { article = 'Chillies' ,ubicació = 'EUA' , quantitat = 10 , cost = 67.89 } ,
} ;


per cadascú ( era i en preus_país )
{
Consola . WriteLine ( i . article + ' ' + i . ubicació + ' ' + i . quantitat + ' ' + i . cost ) ;
}
}
}
públic classe Preus {
públic corda article { aconseguir ; conjunt ; }
públic corda ubicació { aconseguir ; conjunt ; }
públic int quantitat { aconseguir ; conjunt ; }
públic doble cost { aconseguir ; conjunt ; }
}

Registres:







Explicació:

1. Creeu els preus amb els atributs següents:

2. Creeu una altra classe que sigui 'Càlculs' amb el mètode principal i creeu la llista country_prices amb cinc registres.



Seleccioneu

Bàsicament, 'seleccionar' és un operador de projecció que selecciona els atributs de la font de dades especificada. La consulta comença amb 'de'. A continuació, especifiquem l'iterador que itera sobre la font de dades. A continuació, s'especifica l'operador 'seleccionar'.

Sintaxi:

Tots els atributs: des de l'iterador a Data_Source seleccioneu l'iterador;

Atribut específic: des de l'iterador a Data_Source seleccioneu iterator.attribute;

Exemple 1:

Escrivim una consulta per seleccionar tots els registres de la llista.

utilitzant Sistema ;
utilitzant System.Collections.Generic ;
utilitzant System.Linq ;
utilitzant Sistema.Col·leccions ;

públic classe Càlculs
{
públic estàtica buit Principal ( )
{
// Creació de llista
Llista de preus_país = nou Llista ( ) {

// Afegeix 5 registres a la llista
nou Preus ( ) { article = 'Fruites' ,ubicació = 'EUA' , quantitat = 100 , cost = 345.78 } ,
nou Preus ( ) { article = 'Nous' ,ubicació = 'Índia' , quantitat = 200 , cost = 3645.78 } ,
nou Preus ( ) { article = 'Altres' ,ubicació = 'UK' , quantitat = 500 , cost = 90.68 } ,
nou Preus ( ) { article = 'oli' ,ubicació = 'EUA' , quantitat = 100 , cost = 345.78 } ,
nou Preus ( ) { article = 'Chillies' ,ubicació = 'EUA' , quantitat = 10 , cost = 67.89 } ,
} ;

//seleccioneu l'operador a la consulta
era dades = des de i en preus_país
seleccionar i ;

per cadascú ( era i en dades )
{
Consola . WriteLine ( i . article + ' ' + i . ubicació + ' ' + i . quantitat + ' ' + i . cost ) ;

}
}
}
públic classe Preus {
públic corda article { aconseguir ; conjunt ; }
públic corda ubicació { aconseguir ; conjunt ; }
públic int quantitat { aconseguir ; conjunt ; }
públic doble cost { aconseguir ; conjunt ; }
}

Sortida:

Aquí, no hem especificat cap atribut a la consulta 'seleccionar'. Vam obtenir tots els atributs de la consulta (dades) dins del bucle 'foreach' mitjançant l'iterador.

Exemple 2:

Ara, obteniu els elements especificant l'atribut de l'element dins de l'operador 'seleccionar'. La consulta és ' de i a country_prices seleccioneu i.item ”.

//seleccioneu l'operador per obtenir l'atribut de l'element a la consulta
era dades = des de i en preus_país
seleccionar i . article ;

per cadascú ( era i en dades )
{
Consola . WriteLine ( i ) ;

}

Sortida:

Línia 21 - Línia 29:

2. On

Si voleu filtrar les dades en funció d'algunes condicions, podeu utilitzar l'operador 'on' a la consulta juntament amb la clàusula 'seleccionar'. Però primer s'utilitza l'operador 'on' i després s'especifica l'operador de selecció.

Sintaxi:

Vegem com utilitzar l'operador 'on' dins de la consulta LINQ.

des de iterador en Font de dades
on condició / s
seleccionar iterador . atribut ;

Exemple 1: Condició única

Filtrem els registres en funció de l'atribut de l'element. Utilitzeu l'operador igual a (==) a l'operador 'on' com a condició i compareu l'iterador amb 'Chillies'. Per tant, es seleccionen els registres relacionats amb 'Chillies'.

La consulta és ' de i a country_prices
on i.item == 'Chillies'
selecciona jo'

//seleccioneu amb on filtrar els registres
era dades = des de i en preus_país
on i . article == 'Chillies'
seleccionar i ;

per cadascú ( era i en dades )
{
Consola . WriteLine ( i . article + ' ' + i . ubicació + ' ' + i . quantitat + ' ' + i . cost ) ;

}

Sortida:

Només hi ha un registre amb l'element 'Chillies'.

Línia 21 - Línia 30:

Exemple 2: Condicions múltiples

Filtrem els registres en funció dels atributs d'ubicació i quantitat. La quantitat ha de ser superior a 50 i inferior a 300. La ubicació ha de ser 'EUA'.

La consulta és ' de i a country_prices
on i.quantitat > 50
on i.quantitat < 300
on i.location == 'EUA'
selecciona jo'

//seleccioneu on filtrar els registres especificant diverses condicions
era dades = des de i en preus_país
on i . quantitat > 50
on i . quantitat < 300
on i . ubicació == 'EUA'
seleccionar i ;

per cadascú ( era i en dades )
{
Consola . WriteLine ( i . article + ' ' + i . ubicació + ' ' + i . quantitat + ' ' + i . cost ) ;

}

Sortida:

Hi ha dos registres que coincideixen amb les condicions anteriors.

Línia 21 - Línia 32:

Exemple 3: I (&&) Operador

Podem especificar l'operador 'i (&&)' per especificar diverses condicions alhora. Si totes les condicions són certes, la consulta retorna els registres que compleixen totes les condicions.

En aquest exemple, seleccionem els registres si la quantitat és superior a 20 i el cost és 67,89.

La consulta és ' de i a country_prices
on i.quantitat < 20 && i.cost == 67,89
selecciona jo'

era dades = des de i en preus_país
on i . quantitat < 20 && i . cost == 67.89
seleccionar i ;

per cadascú ( era i en dades )
{
Consola . WriteLine ( i . article + ' ' + i . ubicació + ' ' + i . quantitat + ' ' + i . cost ) ;

}

Sortida:

Només hi ha un registre amb la quantitat inferior a 20 i un cost de 67,89

Línia 21 - Línia 29:

Exemple 4: O (||) Operador

L'operador “o (||)” també s'utilitza per especificar diverses condicions alhora. Si almenys una condició és certa, es retornen els registres que compleixen aquesta condició.

En aquest exemple, seleccionem els registres si la quantitat és superior a 300 o la ubicació és 'Tòquio'.

La consulta és ' de i a country_prices
on i.quantitat > 300 || i.location == 'Tòquio'
selecciona jo'

era dades = des de i en preus_país
on i . quantitat > 300 || i . ubicació == 'Tòquio'
seleccionar i ;

per cadascú ( era i en dades )
{
Consola . WriteLine ( i . article + ' ' + i . ubicació + ' ' + i . quantitat + ' ' + i . cost ) ;

}

Sortida:

Només hi ha un registre amb una quantitat superior a 300 (la primera condició coincideix).

Línia 21 - Línia 29:

3. Ordena per

Si voleu organitzar els registres que retorna la consulta LINQ en ordre ascendent o descendent en funció dels valors de qualsevol dels atributs, podeu utilitzar l'operador 'ordenar per' a la consulta. Heu d'especificar aquest operador abans de l'operador 'seleccionar'.

Sintaxi:

Vegem com utilitzar l'operador 'orden by' dins de la consulta LINQ.

Ordre ascendent:

des de iterador en Font de dades
ordre per iterador . atribut ascendent
seleccionar iterador ;

Ordre descendent:

des de iterador en Font de dades
ordre per iterador . atribut descendent
seleccionar iterador ;

Exemple 1: Ordre ascendent

Seleccioneu tots els atributs de la font de dades (llista) i torneu-los en ordre ascendent en funció dels valors de l'atribut de quantitat.

La consulta és ' de i a country_prices
orderby i.quantitat ascendent
selecciona jo'

era dades = des de i en preus_país
ordenar per i . quantitat ascendent
seleccionar i ;

per cadascú ( era i en dades )
{
Consola . WriteLine ( i . article + ' ' + i . ubicació + ' ' + i . quantitat + ' ' + i . cost ) ;

}

Sortida:

Línia 21 - Línia 29:

Exemple 2: Ordre descendent

Seleccioneu tots els atributs de la font de dades (llista) i torneu-los en ordre descendent en funció dels valors de l'atribut de cost.

La consulta és ' de i a country_prices
ordena per i.cost descendent
selecciona jo'

era dades = des de i en preus_país
ordenar per i . cost descendent
seleccionar i ;

per cadascú ( era i en dades )
{
Consola . WriteLine ( i . article + ' ' + i . ubicació + ' ' + i . quantitat + ' ' + i . cost ) ;

}

Sortida:

Línia 21 - Línia 29:

4. Límit

Limit en SQL limita els registres que retorna la consulta. Retorna els registres principals que retorna la consulta. A LINQ, podem aconseguir-ho utilitzant Skip() amb l'operador Take(). Take() obté el nombre especificat de registres. Skip() s'utilitza per especificar el número de registre inicial. D'aquesta manera, podem aconseguir la funcionalitat 'límit' a LINQ.

Sintaxi:

( des de iterador en Font de dades
seleccionar iterador ) . Omet ( n ) . Pren ( n ) ;
  1. Skip() s'utilitza per saltar els registres i retornar els registres restants. Pren un nombre enter que especifica el nombre d'elements que s'han d'ometre. En el nostre cas, és 0.
  2. Take() s'utilitza per agafar 'n' nombre de registres del primer registre.

Exemple:

Seleccioneu els tres primers registres dels cinc registres que retorna la consulta.

La consulta és ' (des de i a country_prices
seleccioneu i).Skip(0).Take(3)”

era dades = ( des de i en preus_país
seleccionar i ) . Omet ( 0 ) . Pren ( 3 ) ;

per cadascú ( era i en dades )
{
Consola . WriteLine ( i . article + ' ' + i . ubicació + ' ' + i . quantitat + ' ' + i . cost ) ;

}

}

Sortida:

Línia 21 - Línia 28:

Conclusió

Hem après a escriure les consultes en C# LINQ, que és similar a SQL. Com a part d'aquest tutorial, vam parlar de com utilitzar l'operador 'seleccionar' per seleccionar els registres de la font de dades. Per filtrar els registres que retorna la consulta, hem utilitzat l'operador 'on' especificant les condicions. Aleshores, vam aprendre a ordenar els registres que retorna la consulta amb l'operador 'ordenar per'. Finalment, per limitar els registres, hem utilitzat els operadors Skip() i Take().