Scrierea de interogări în C# LINQ

Scrierea De Interogari In C Linq



Similar cu SQL, este posibil să scrieți interogări în C# LINQ folosind sintaxa interogării. Aceste interogări sunt utilizate în aplicațiile de baze de date C# pe web pentru a obține datele din baza de date și a le afișa pe web utilizatorilor terți. În acest ghid, vom discuta câteva interogări LINQ care sunt similare cu SQL. Pentru aceasta, vom crea o sursă de date listă și vom aplica interogările în ea.

Sintaxa interogării:

Să ne uităm la sintaxa generică:

din iterator în Sursă de date
Selectați iterator ;

Aici:







  1. Data_Source poate fi lista care deține datele.
  2. Iteratorul este folosit pentru a prelua elementele din Data_Source.

Sursă de date

În întregul ghid, vom folosi următoarea listă de înregistrări ca sursă de date și toate interogările sunt aplicate numai pe această sursă de date. Asigurați-vă că executați acest cod în mediul dvs. și modificați instrucțiunile de interogare cu următoarele exemple unul câte unul, pe care le vom discuta:



folosind Sistem ;
folosind Sistem.Colecții.Generic ;
folosind System.Linq ;
folosind Sistem.Colecţii ;

public clasă Calcule
{
public static vid Principal ( )
{
// Crearea listei
Lista country_prices = nou Listă ( ) {

// Adăugați 5 înregistrări în Listă
nou Preturi ( ) { articol = 'Fructe' ,Locație = 'STATELE UNITE ALE AMERICII' , cantitate = 100 , cost = 345,78 } ,
nou Preturi ( ) { articol = 'Nuci' ,Locație = 'India' , cantitate = 200 , cost = 3645,78 } ,
nou Preturi ( ) { articol = 'Alții' ,Locație = 'REGATUL UNIT' , cantitate = 500 , cost = 90,68 } ,
nou Preturi ( ) { articol = 'ulei' ,Locație = 'STATELE UNITE ALE AMERICII' , cantitate = 100 , cost = 345,78 } ,
nou Preturi ( ) { articol = 'Ardei iuti' ,Locație = 'STATELE UNITE ALE AMERICII' , cantitate = 10 , cost = 67,89 } ,
} ;


pentru fiecare ( a fost i în preturi_tarii )
{
Consolă . WriteLine ( i . articol + ' ' + i . Locație + ' ' + i . cantitate + ' ' + i . cost ) ;
}
}
}
public clasă Preturi {
public şir articol { obține ; a stabilit ; }
public şir Locație { obține ; a stabilit ; }
public int cantitate { obține ; a stabilit ; }
public dubla cost { obține ; a stabilit ; }
}

Înregistrări:







Explicaţie:

1. Creați prețurile cu următoarele atribute:

2. Creați o altă clasă care este „Calculații” cu metoda principală și creați lista country_prices cu cinci înregistrări.



Selectați

Practic, „select” este un operator de proiecție care selectează atributele din sursa de date specificată. Interogarea începe cu „de la”. Apoi, specificăm iteratorul care iterează peste sursa de date. Apoi, este specificat operatorul „select”.

Sintaxă:

Toate atributele: din iterator în Data_Source selectați iteratorul;

Atribut specific: din iterator în Data_Source selectați iterator.attribute;

Exemplul 1:

Să scriem o interogare pentru a selecta toate înregistrările din listă.

folosind Sistem ;
folosind Sistem.Colecții.Generic ;
folosind System.Linq ;
folosind Sistem.Colecţii ;

public clasă Calcule
{
public static vid Principal ( )
{
// Crearea listei
Lista country_prices = nou Listă ( ) {

// Adăugați 5 înregistrări în Listă
nou Preturi ( ) { articol = 'Fructe' ,Locație = 'STATELE UNITE ALE AMERICII' , cantitate = 100 , cost = 345,78 } ,
nou Preturi ( ) { articol = 'Nuci' ,Locație = 'India' , cantitate = 200 , cost = 3645,78 } ,
nou Preturi ( ) { articol = 'Alții' ,Locație = 'REGATUL UNIT' , cantitate = 500 , cost = 90,68 } ,
nou Preturi ( ) { articol = 'ulei' ,Locație = 'STATELE UNITE ALE AMERICII' , cantitate = 100 , cost = 345,78 } ,
nou Preturi ( ) { articol = 'Ardei iuti' ,Locație = 'STATELE UNITE ALE AMERICII' , cantitate = 10 , cost = 67,89 } ,
} ;

//selectați operatorul în interogare
a fost date = din i în preturi_tarii
Selectați i ;

pentru fiecare ( a fost i în date )
{
Consolă . WriteLine ( i . articol + ' ' + i . Locație + ' ' + i . cantitate + ' ' + i . cost ) ;

}
}
}
public clasă Preturi {
public şir articol { obține ; a stabilit ; }
public şir Locație { obține ; a stabilit ; }
public int cantitate { obține ; a stabilit ; }
public dubla cost { obține ; a stabilit ; }
}

Ieșire:

Aici, nu am specificat niciun atribut în interogarea „selectați”. Am preluat toate atributele din interogare (date) în bucla „foreach” folosind iteratorul.

Exemplul 2:

Acum, obțineți articolele specificând atributul articolului în cadrul operatorului „select”. Interogarea este  „ din i în country_prices selectați i.item ”.

//selectați operatorul pentru a obține atributul articolului în interogare
a fost date = din i în preturi_tarii
Selectați i . articol ;

pentru fiecare ( a fost i în date )
{
Consolă . WriteLine ( i ) ;

}

Ieșire:

Linia # 21 – Linia # 29:

2. Unde

Dacă doriți să filtrați datele pe baza unor condiții/e, puteți utiliza operatorul „unde” în interogare împreună cu clauza „select”. Dar operatorul „unde” este folosit mai întâi și apoi este specificat operatorul de selectare.

Sintaxă:

Să vedem cum să folosim operatorul „unde” în interiorul interogării LINQ.

din iterator în Sursă de date
Unde condiție / s
Selectați iterator . atribut ;

Exemplul 1: Condiție unică

Să filtram înregistrările în funcție de atributul articolului. Utilizați operatorul egal cu (==) în operatorul „unde” ca condiție și comparați iteratorul cu „Chillies”. Deci, înregistrările care sunt legate de „Chillies” sunt selectate.

Interogarea este „ de la i în country_prices
unde i.item == „Ardei iute”
selectează eu”

//selectați unde să filtrați înregistrările
a fost date = din i în preturi_tarii
Unde i . articol == 'Ardei iuti'
Selectați i ;

pentru fiecare ( a fost i în date )
{
Consolă . WriteLine ( i . articol + ' ' + i . Locație + ' ' + i . cantitate + ' ' + i . cost ) ;

}

Ieșire:

Există o singură înregistrare cu elementul „Chillies”.

Linia # 21 – Linia # 30:

Exemplul 2: Condiții multiple

Să filtram înregistrările pe baza atributelor locației și cantității. Cantitatea ar trebui să fie mai mare de 50 și mai mică de 300. Locația ar trebui să fie „SUA”.

Interogarea este „ de la i în country_prices
unde i.cantitate > 50
unde i.cantitate < 300
unde i.location == „SUA”
selectează eu”

//selectați unde să filtrați înregistrările prin specificarea mai multor condiții
a fost date = din i în preturi_tarii
Unde i . cantitate > cincizeci
Unde i . cantitate < 300
Unde i . Locație == 'STATELE UNITE ALE AMERICII'
Selectați i ;

pentru fiecare ( a fost i în date )
{
Consolă . WriteLine ( i . articol + ' ' + i . Locație + ' ' + i . cantitate + ' ' + i . cost ) ;

}

Ieșire:

Există două înregistrări care corespund condițiilor anterioare.

Linia # 21 – Linia # 32:

Exemplul 3: Și (&&) Operator

Putem specifica operatorul „și (&&)” pentru a specifica mai multe condiții simultan. Dacă toate condițiile sunt adevărate, înregistrările care îndeplinesc toate condițiile sunt returnate de interogare.

În acest exemplu, selectăm înregistrările dacă cantitatea este mai mare de 20 și costul este 67,89.

Interogarea este „ de la i în country_prices
unde i.cantitate < 20 && i.cost == 67,89
selectează eu”

a fost date = din i în preturi_tarii
Unde i . cantitate < douăzeci && i . cost == 67,89
Selectați i ;

pentru fiecare ( a fost i în date )
{
Consolă . WriteLine ( i . articol + ' ' + i . Locație + ' ' + i . cantitate + ' ' + i . cost ) ;

}

Ieșire:

Există o singură înregistrare cu cantitatea mai mică de 20 și un cost de 67,89

Linia # 21 – Linia # 29:

Exemplul 4: Sau (||) Operator

Operatorul „sau (||)” este de asemenea folosit pentru a specifica mai multe condiții simultan. Dacă cel puțin o condiție este adevărată, înregistrările care satisfac acea condiție sunt returnate.

În acest exemplu, selectăm înregistrările dacă cantitatea este mai mare de 300 sau locația este „Tokyo”.

Interogarea este „ de la i în country_prices
unde i.cantitate > 300 || i.location == „Tokyo”
selectează eu”

a fost date = din i în preturi_tarii
Unde i . cantitate > 300 || i . Locație == 'Tokio'
Selectați i ;

pentru fiecare ( a fost i în date )
{
Consolă . WriteLine ( i . articol + ' ' + i . Locație + ' ' + i . cantitate + ' ' + i . cost ) ;

}

Ieșire:

Există o singură înregistrare cu o cantitate mai mare de 300 (prima condiție este potrivită).

Linia # 21 – Linia # 29:

3. Comandă până la

Dacă doriți să aranjați înregistrările care sunt returnate de interogarea LINQ în ordine crescătoare sau descrescătoare pe baza valorilor din oricare dintre atribute, puteți utiliza operatorul „ordonare după” în interogare. Trebuie să specificați acest operator înainte de operatorul „select”.

Sintaxă:

Să vedem cum să folosim operatorul „ordonare după” în interogarea LINQ.

Ordine crescătoare:

din iterator în Sursă de date
Ordin de iterator . atribut ascendent
Selectați iterator ;

Ordine descrescatoare:

din iterator în Sursă de date
Ordin de iterator . atribut Descendentă
Selectați iterator ;

Exemplul 1: Ordine crescătoare

Selectați toate atributele din sursa de date (listă) și returnați-le în ordine crescătoare pe baza valorilor din atributul de cantitate.

Interogarea este „ de la i în country_prices
ordona după i.cantitate crescătoare
selectează eu”

a fost date = din i în preturi_tarii
comanda prin i . cantitate ascendent
Selectați i ;

pentru fiecare ( a fost i în date )
{
Consolă . WriteLine ( i . articol + ' ' + i . Locație + ' ' + i . cantitate + ' ' + i . cost ) ;

}

Ieșire:

Linia # 21 – Linia # 29:

Exemplul 2: Ordine descrescatoare

Selectați toate atributele din sursa de date (listă) și returnați-le în ordine descrescătoare pe baza valorilor din atributul cost.

Interogarea este „ de la i în country_prices
ordona dupa i.cost descrescator
selectează eu”

a fost date = din i în preturi_tarii
comanda prin i . cost Descendentă
Selectați i ;

pentru fiecare ( a fost i în date )
{
Consolă . WriteLine ( i . articol + ' ' + i . Locație + ' ' + i . cantitate + ' ' + i . cost ) ;

}

Ieșire:

Linia # 21 – Linia # 29:

4. Limită

Limit în SQL limitează înregistrările care sunt returnate de interogare. Returnează primele înregistrări care sunt returnate de interogare. În LINQ, putem realiza acest lucru utilizând Skip() cu operatorul Take(). Take() primește numărul specificat de înregistrări. Skip() este folosit pentru a specifica numărul de înregistrare de pornire. În acest fel, putem atinge funcționalitatea „limită” în LINQ.

Sintaxă:

( din iterator în Sursă de date
Selectați iterator ) . Ocolire ( n ) . Lua ( n ) ;
  1. Skip() este folosit pentru a sări peste înregistrările și pentru a returna înregistrările rămase. Este nevoie de un număr întreg care specifică numărul de elemente care trebuie sărit. În cazul nostru, este 0.
  2. Take() este folosit pentru a lua „n” număr de înregistrări din prima înregistrare.

Exemplu:

Selectați primele trei înregistrări din cinci înregistrări care sunt returnate de interogare.

Interogarea este „ (de la i în country_prices
selectați i).Skip(0).Take(3)”

a fost date = ( din i în preturi_tarii
Selectați i ) . Ocolire ( 0 ) . Lua ( 3 ) ;

pentru fiecare ( a fost i în date )
{
Consolă . WriteLine ( i . articol + ' ' + i . Locație + ' ' + i . cantitate + ' ' + i . cost ) ;

}

}

Ieșire:

Linia # 21 – Linia # 28:

Concluzie

Am învățat cum să scriem interogările în C# LINQ, care este similar cu SQL. Ca parte a acestui tutorial, am discutat cum să folosiți operatorul „select” pentru a selecta înregistrările din sursa de date. Pentru a filtra înregistrările care sunt returnate de interogare, am folosit operatorul „unde” prin specificarea condițiilor. Apoi, am învățat cum să sortăm înregistrările care sunt returnate de interogare cu operatorul „ordonare după”. În cele din urmă, pentru a limita înregistrările, am folosit operatorii Skip() și Take().