Kyselyjen kirjoittaminen C# LINQ:ssa

Kyselyjen Kirjoittaminen C Linq Ssa



Kuten SQL:ssä, on mahdollista kirjoittaa kyselyitä C# LINQ:ssa kyselyn syntaksin avulla. Näitä kyselyjä käytetään C#-tietokantasovelluksissa verkossa tietojen hakemiseen tietokannasta ja näyttämiseksi verkossa kolmansien osapuolien käyttäjille. Tässä oppaassa käsittelemme joitakin LINQ-kyselyitä, jotka ovat samanlaisia ​​kuin SQL. Tätä varten luomme luettelotietolähteen ja käytämme siinä olevia kyselyjä.

Kyselyn syntaksi:

Katsotaanpa yleistä syntaksia:

alkaen iteraattori sisään Tietolähde
valitse iteraattori ;

Tässä:







  1. Data_Source voi olla luettelo, joka sisältää tiedot.
  2. Iteraattoria käytetään elementtien hakemiseen Data_Sourcesta.

Tietolähde

Tässä koko oppaassa käytämme seuraavaa tietueluetteloa tietolähteenä ja kaikki kyselyt koskevat vain tätä tietolähdettä. Varmista, että suoritat tämän koodin ympäristössäsi ja muokkaat kyselylauseita seuraavilla esimerkeillä yksitellen, joista aiomme keskustella:



käyttämällä Järjestelmä ;
käyttämällä System.Collections.Generic ;
käyttämällä System.Linq ;
käyttämällä System.Collections ;

julkinen luokkaa Laskelmat
{
julkinen staattinen mitätön Main ( )
{
// Listan luominen
Luettelo maa_hinnat = Uusi Lista ( ) {

// Lisää 5 tietuetta luetteloon
Uusi hinnat ( ) { kohde = 'Hedelmät' ,sijainti = 'USA' , määrä = 100 , kustannus = 345,78 } ,
Uusi hinnat ( ) { kohde = 'Pähkinät' ,sijainti = 'Intia' , määrä = 200 , kustannus = 3645,78 } ,
Uusi hinnat ( ) { kohde = 'muut' ,sijainti = 'UK' , määrä = 500 , kustannus = 90,68 } ,
Uusi hinnat ( ) { kohde = 'öljy' ,sijainti = 'USA' , määrä = 100 , kustannus = 345,78 } ,
Uusi hinnat ( ) { kohde = 'Chillit' ,sijainti = 'USA' , määrä = 10 , kustannus = 67,89 } ,
} ;


jokaiselle ( oli i sisään country_hinnat )
{
Konsoli . WriteLine ( i . kohde + ' ' + i . sijainti + ' ' + i . määrä + ' ' + i . kustannus ) ;
}
}
}
julkinen luokkaa hinnat {
julkinen merkkijono kohde { saada ; aseta ; }
julkinen merkkijono sijainti { saada ; aseta ; }
julkinen int määrä { saada ; aseta ; }
julkinen kaksinkertainen kustannus { saada ; aseta ; }
}

Records:







Selitys:

1. Luo hinnat seuraavilla määritteillä:

2. Luo toinen luokka, joka on 'Laskelmat' päämenetelmällä ja luo country_prices lista viidellä tietueella.



Valitse

Pohjimmiltaan 'select' on projektiooperaattori, joka valitsee määritteet määritetystä tietolähteestä. Kysely alkaa sanalla 'from'. Sitten määritämme iteraattorin, joka toistuu tietolähteen yli. Sitten määritetään 'select'-operaattori.

Syntaksi:

Kaikki attribuutit: iteraattorista Data_Sourcessa valitse iteraattori;

Erityinen ominaisuus: iteratorista Data_Sourcessa valitse iterator.attribute;

Esimerkki 1:

Kirjoita kysely valitaksesi kaikki tietueet luettelosta.

käyttämällä Järjestelmä ;
käyttämällä System.Collections.Generic ;
käyttämällä System.Linq ;
käyttämällä System.Collections ;

julkinen luokkaa Laskelmat
{
julkinen staattinen mitätön Main ( )
{
// Listan luominen
Luettelo maa_hinnat = Uusi Lista ( ) {

// Lisää 5 tietuetta luetteloon
Uusi hinnat ( ) { kohde = 'Hedelmät' ,sijainti = 'USA' , määrä = 100 , kustannus = 345,78 } ,
Uusi hinnat ( ) { kohde = 'Pähkinät' ,sijainti = 'Intia' , määrä = 200 , kustannus = 3645,78 } ,
Uusi hinnat ( ) { kohde = 'muut' ,sijainti = 'UK' , määrä = 500 , kustannus = 90,68 } ,
Uusi hinnat ( ) { kohde = 'öljy' ,sijainti = 'USA' , määrä = 100 , kustannus = 345,78 } ,
Uusi hinnat ( ) { kohde = 'Chillit' ,sijainti = 'USA' , määrä = 10 , kustannus = 67,89 } ,
} ;

//valitse operaattori kyselystä
oli tiedot = alkaen i sisään country_hinnat
valitse i ;

jokaiselle ( oli i sisään tiedot )
{
Konsoli . WriteLine ( i . kohde + ' ' + i . sijainti + ' ' + i . määrä + ' ' + i . kustannus ) ;

}
}
}
julkinen luokkaa hinnat {
julkinen merkkijono kohde { saada ; aseta ; }
julkinen merkkijono sijainti { saada ; aseta ; }
julkinen int määrä { saada ; aseta ; }
julkinen kaksinkertainen kustannus { saada ; aseta ; }
}

Lähtö:

Tässä emme määrittäneet mitään attribuuttia 'select'-kyselyssä. Haimme kaikki attribuutit kyselystä (data) 'foreach'-silmukan sisällä iteraattorin avulla.

Esimerkki 2:

Hanki nyt kohteet määrittämällä item-attribuutti 'select'-operaattorissa. Kysely on  ' i:stä country_pricesissa valitse i.item ”.

//valitse operaattori saadaksesi item-attribuutin kyselyyn
oli tiedot = alkaen i sisään country_hinnat
valitse i . kohde ;

jokaiselle ( oli i sisään tiedot )
{
Konsoli . WriteLine ( i ) ;

}

Lähtö:

Rivi #21 – Rivi #29:

2. Missä

Jos haluat suodattaa tiedot joidenkin ehtojen perusteella, voit käyttää kyselyssä 'jos'-operaattoria 'select'-lauseen ohella. Mutta ensin käytetään operaattoria 'jos' ja sitten valitaan operaattori.

Syntaksi:

Katsotaanpa, kuinka 'jos'-operaattoria käytetään LINQ-kyselyn sisällä.

alkaen iteraattori sisään Tietolähde
missä kunto / s
valitse iteraattori . attribuutti ;

Esimerkki 1: Yksittäinen kunto

Suodatetaan tietueita nimikeattribuutin perusteella. Käytä ehtona yhtä kuin (==) -operaattoria 'jos'-operaattorissa ja vertaa iteraattoria 'chillisiin'. Joten 'Chilliin' liittyvät tietueet valitaan.

Kysely on ' alkaen i maa_hinnoissa
jossa i.item == 'Chillit'
valitse minä'

//valitse, missä tietueet suodatetaan
oli tiedot = alkaen i sisään country_hinnat
missä i . kohde == 'Chillit'
valitse i ;

jokaiselle ( oli i sisään tiedot )
{
Konsoli . WriteLine ( i . kohde + ' ' + i . sijainti + ' ' + i . määrä + ' ' + i . kustannus ) ;

}

Lähtö:

On vain yksi levy, jossa on 'Chillies'.

Rivi #21 – Rivi #30:

Esimerkki 2: Useita ehtoja

Suodatetaan tietueita sijainti- ja määrämääritteiden perusteella. Määrän tulee olla suurempi kuin 50 ja alle 300. Sijainnin tulee olla 'USA'.

Kysely on ' alkaen i maa_hinnoissa
jossa i.määrä > 50
jossa i.määrä < 300
jossa i.location == 'USA'
valitse minä'

//valitse, missä tietueet suodatetaan määrittämällä useita ehtoja
oli tiedot = alkaen i sisään country_hinnat
missä i . määrä > viisikymmentä
missä i . määrä < 300
missä i . sijainti == 'USA'
valitse i ;

jokaiselle ( oli i sisään tiedot )
{
Konsoli . WriteLine ( i . kohde + ' ' + i . sijainti + ' ' + i . määrä + ' ' + i . kustannus ) ;

}

Lähtö:

Kaksi tietuetta vastasi aikaisempia ehtoja.

Rivi #21 – Rivi #32:

Esimerkki 3: Ja (&&) Operaattori

Voimme määrittää 'ja (&&)' -operaattorin määrittääksesi useita ehtoja kerralla. Jos kaikki ehdot ovat tosia, kysely palauttaa tietueet, jotka täyttävät kaikki ehdot.

Tässä esimerkissä valitsemme tietueet, jos määrä on suurempi kuin 20 ja hinta on 67,89.

Kysely on ' alkaen i maa_hinnoissa
jossa i.määrä < 20 && i.kustannus == 67,89
valitse minä'

oli tiedot = alkaen i sisään country_hinnat
missä i . määrä < kaksikymmentä && i . kustannus == 67,89
valitse i ;

jokaiselle ( oli i sisään tiedot )
{
Konsoli . WriteLine ( i . kohde + ' ' + i . sijainti + ' ' + i . määrä + ' ' + i . kustannus ) ;

}

Lähtö:

On vain yksi tietue, jonka määrä on alle 20 ja jonka hinta on 67,89

Rivi #21 – Rivi #29:

Esimerkki 4: Tai (||) Operaattori

Operaattoria 'tai (||)' käytetään myös useiden ehtojen määrittämiseen kerralla. Jos vähintään yksi ehto on tosi, ehdon täyttävät tietueet palautetaan.

Tässä esimerkissä valitsemme tietueet, jos määrä on suurempi kuin 300 tai sijainti on 'Tokio'.

Kysely on ' alkaen i, country_prices
jossa i.määrä > 300 || i.location == 'Tokio'
valitse minä'

oli tiedot = alkaen i sisään country_hinnat
missä i . määrä > 300 || i . sijainti == 'Tokio'
valitse i ;

jokaiselle ( oli i sisään tiedot )
{
Konsoli . WriteLine ( i . kohde + ' ' + i . sijainti + ' ' + i . määrä + ' ' + i . kustannus ) ;

}

Lähtö:

On vain yksi tietue, jonka määrä on suurempi kuin 300 (ensimmäinen ehto täyttyy).

Rivi #21 – Rivi #29:

3. Tilauksen mukaan

Jos haluat järjestää LINQ-kyselyn palauttamat tietueet nousevaan tai laskevaan järjestykseen minkä tahansa määritteen arvojen perusteella, voit käyttää kyselyssä 'järjestää'-operaattoria. Sinun on määritettävä tämä operaattori ennen 'select'-operaattoria.

Syntaksi:

Katsotaanpa, kuinka 'tilausperuste'-operaattoria käytetään LINQ-kyselyn sisällä.

Nousevassa järjestyksessä:

alkaen iteraattori sisään Tietolähde
Tilaus kirjoittaja iteraattori . attribuutti nouseva
valitse iteraattori ;

Laskeva järjestys:

alkaen iteraattori sisään Tietolähde
Tilaus kirjoittaja iteraattori . attribuutti laskeva
valitse iteraattori ;

Esimerkki 1: Nousevassa järjestyksessä

Valitse kaikki attribuutit tietolähteestä (luettelosta) ja palauta ne nousevassa järjestyksessä määrä-attribuutin arvojen perusteella.

Kysely on ' alkaen i, country_prices
i.määrän mukaan nousevassa järjestyksessä
valitse minä'

oli tiedot = alkaen i sisään country_hinnat
tilaa i . määrä nouseva
valitse i ;

jokaiselle ( oli i sisään tiedot )
{
Konsoli . WriteLine ( i . kohde + ' ' + i . sijainti + ' ' + i . määrä + ' ' + i . kustannus ) ;

}

Lähtö:

Rivi #21 – Rivi #29:

Esimerkki 2: Laskeva järjestys

Valitse kaikki attribuutit tietolähteestä (luettelosta) ja palauta ne laskevassa järjestyksessä kustannusmääritteen arvojen perusteella.

Kysely on ' alkaen i maa_hinnoissa
tilauksen mukaan i.cost laskeva
valitse minä'

oli tiedot = alkaen i sisään country_hinnat
tilaa i . kustannus laskeva
valitse i ;

jokaiselle ( oli i sisään tiedot )
{
Konsoli . WriteLine ( i . kohde + ' ' + i . sijainti + ' ' + i . määrä + ' ' + i . kustannus ) ;

}

Lähtö:

Rivi #21 – Rivi #29:

4. Rajoitus

Limit in SQL rajoittaa tietueita, jotka kysely palauttaa. Se palauttaa kyselyn palauttamat suosituimmat tietueet. LINQ:ssa voimme saavuttaa tämän käyttämällä Skip()-toimintoa Take()-operaattorin kanssa. Take() saa määritetyn määrän tietueita. Skip():tä käytetään määrittämään aloitustietueen numero. Tällä tavalla voimme saavuttaa LINQ:n 'raja'-toiminnallisuuden.

Syntaksi:

( alkaen iteraattori sisään Tietolähde
valitse iteraattori ) . Ohita ( n ) . Ota ( n ) ;
  1. Skip():tä käytetään tietueiden ohittamiseen ja jäljellä olevien tietueiden palauttamiseen. Se vaatii kokonaisluvun, joka määrittää ohitettavien elementtien määrän. Meidän tapauksessamme se on 0.
  2. Take() käytetään ottamaan 'n' määrä tietueita ensimmäisestä tietueesta.

Esimerkki:

Valitse kolme ensimmäistä tietuetta viidestä kyselyn palauttamasta tietueesta.

Kysely on ' (alkaen maa_hinnat
valitse i).Ohita(0).Ota(3)”

oli tiedot = ( alkaen i sisään country_hinnat
valitse i ) . Ohita ( 0 ) . Ota ( 3 ) ;

jokaiselle ( oli i sisään tiedot )
{
Konsoli . WriteLine ( i . kohde + ' ' + i . sijainti + ' ' + i . määrä + ' ' + i . kustannus ) ;

}

}

Lähtö:

Rivi #21 – Rivi #28:

Johtopäätös

Opimme kirjoittamaan kyselyt C# LINQ:lla, joka on samanlainen kuin SQL. Osana tätä opetusohjelmaa keskustelimme, kuinka 'select'-operaattoria käytetään tietueiden valitsemiseen tietolähteestä. Suodattaaksemme kyselyn palauttamat tietueet käytimme 'jos'-operaattoria määrittämällä ehdot. Sitten opimme lajittelemaan tietueita, jotka kysely palauttaa 'järjestysperuste'-operaattorilla. Lopuksi tietueiden rajoittamiseksi käytimme Skip()- ja Take()-operaattoreita.