Päringute kirjutamine C# LINQ-is

Paringute Kirjutamine C Linq Is



Sarnaselt SQL-iga on võimalik kirjutada päringuid C# LINQ-is, kasutades päringu süntaksit. Neid päringuid kasutatakse veebis olevates C# andmebaasirakendustes andmete hankimiseks andmebaasist ja kuvamiseks veebis kolmandate osapoolte kasutajatele. Selles juhendis käsitleme mõningaid SQL-iga sarnaseid LINQ-päringuid. Selleks loome loendi andmeallika ja rakendame selles olevaid päringuid.

Päringu süntaks:

Vaatame üldist süntaksit:

alates iteraator sisse Andmeallikas
vali iteraator ;

Siin:







  1. Andmeallikas võib olla loend, mis sisaldab andmeid.
  2. Iteraatorit kasutatakse elementide toomiseks andmeallikast.

Andmeallikas

Kogu selles juhendis kasutame andmeallikana järgmist kirjete loendit ja kõiki päringuid rakendatakse ainult sellele andmeallikale. Veenduge, et käitate seda koodi oma keskkonnas ja muutke päringulauseid ükshaaval järgmiste näidetega, mida me arutame:



kasutades Süsteem ;
kasutades Süsteem.Kogud.Üldine ;
kasutades System.Linq ;
kasutades Süsteem.Kogud ;

avalik klass Arvutused
{
avalik staatiline tühine Peamine ( )
{
// Nimekirja koostamine
Loetle riigi_hinnad = uus Nimekiri ( ) {

// Lisage loendisse 5 kirjet
uus Hinnad ( ) { üksus = 'Puuviljad' , asukoht = 'USA' , kogus = 100 , maksumus = 345,78 } ,
uus Hinnad ( ) { üksus = 'Pähklid' , asukoht = 'India' , kogus = 200 , maksumus = 3645,78 } ,
uus Hinnad ( ) { üksus = 'Teised' , asukoht = 'UK' , kogus = 500 , maksumus = 90,68 } ,
uus Hinnad ( ) { üksus = 'õli' , asukoht = 'USA' , kogus = 100 , maksumus = 345,78 } ,
uus Hinnad ( ) { üksus = 'tšillid' , asukoht = 'USA' , kogus = 10 , maksumus = 67,89 } ,
} ;


igaühele ( oli i sisse riigi_hinnad )
{
konsool . WriteLine ( i . üksus + ' ' + i . asukoht + ' ' + i . kogus + ' ' + i . kulu ) ;
}
}
}
avalik klass Hinnad {
avalik string üksus { saada ; seatud ; }
avalik string asukoht { saada ; seatud ; }
avalik int kogus { saada ; seatud ; }
avalik kahekordne kulu { saada ; seatud ; }
}

Rekordid:







Selgitus:

1. Looge hinnad järgmiste atribuutidega.

2. Loo teine ​​klass, mis on põhimeetodiga “Arvutused” ja koosta viie kirjega country_prices nimekiri.



Valige

Põhimõtteliselt on 'select' projektsioonioperaator, mis valib atribuudid määratud andmeallikast. Päring algab sõnaga 'from'. Seejärel määrame iteraatori, mis itereerib andmeallikas. Seejärel määratakse operaator “select”.

Süntaks:

Kõik atribuudid: iteraatorist Andmeallikas vali iteraator;

Konkreetne atribuut: iteraatorist Andmeallikas valige iterator.attribute;

Näide 1:

Kirjutame päringu, et valida loendist kõik kirjed.

kasutades Süsteem ;
kasutades Süsteem.Kogud.Üldine ;
kasutades System.Linq ;
kasutades Süsteem.Kogud ;

avalik klass Arvutused
{
avalik staatiline tühine Peamine ( )
{
// Nimekirja koostamine
Loetle riigi_hinnad = uus Nimekiri ( ) {

// Lisage loendisse 5 kirjet
uus Hinnad ( ) { üksus = 'Puuviljad' , asukoht = 'USA' , kogus = 100 , maksumus = 345,78 } ,
uus Hinnad ( ) { üksus = 'Pähklid' , asukoht = 'India' , kogus = 200 , maksumus = 3645,78 } ,
uus Hinnad ( ) { üksus = 'Teised' , asukoht = 'UK' , kogus = 500 , maksumus = 90,68 } ,
uus Hinnad ( ) { üksus = 'õli' , asukoht = 'USA' , kogus = 100 , maksumus = 345,78 } ,
uus Hinnad ( ) { üksus = 'tšillid' , asukoht = 'USA' , kogus = 10 , maksumus = 67,89 } ,
} ;

//valige päringus operaator
oli andmeid = alates i sisse riigi_hinnad
vali i ;

igaühele ( oli i sisse andmeid )
{
konsool . WriteLine ( i . üksus + ' ' + i . asukoht + ' ' + i . kogus + ' ' + i . kulu ) ;

}
}
}
avalik klass Hinnad {
avalik string üksus { saada ; seatud ; }
avalik string asukoht { saada ; seatud ; }
avalik int kogus { saada ; seatud ; }
avalik kahekordne kulu { saada ; seatud ; }
}

Väljund:

Siin ei määranud me päringus „select” ühtegi atribuuti. Tõime iteraatori abil kõik päringu (andmete) atribuudid foreach-tsükli seest.

Näide 2:

Nüüd hankige üksused, määrates operaatori 'select' sees atribuudi item. Päring on  ' i-st riigist_hinnad valige i.item ”.

//valige operaator, et saada päringus üksuse atribuut
oli andmeid = alates i sisse riigi_hinnad
vali i . üksus ;

igaühele ( oli i sisse andmeid )
{
konsool . WriteLine ( i ) ;

}

Väljund:

Rida # 21 – rida # 29:

2. Kus

Kui soovite andmeid mõne tingimuse/tingimuste alusel filtreerida, võite päringus kasutada operaatorit „kus” koos „select”-klausliga. Kuid kõigepealt kasutatakse operaatorit “kus” ja seejärel määratakse operaator.

Süntaks:

Vaatame, kuidas kasutada LINQ-päringu sees operaatorit „kus”.

alates iteraator sisse Andmeallikas
kus tingimus / s
vali iteraator . atribuut ;

Näide 1: Üksik seisund

Filtreerime kirjed üksuse atribuudi alusel. Kasutage tingimusena võrdne (==) operaatorit operaatoris 'kus' ja võrrelge iteraatorit 'tšilliga'. Seega on valitud plaadid, mis on seotud 'tšilliga'.

Päring on ' alates i riigist_hinnad
kus i.item == 'tšillid'
vali mina'

//valige kirjete filtreerimise kohaga
oli andmeid = alates i sisse riigi_hinnad
kus i . üksus == 'tšillid'
vali i ;

igaühele ( oli i sisse andmeid )
{
konsool . WriteLine ( i . üksus + ' ' + i . asukoht + ' ' + i . kogus + ' ' + i . kulu ) ;

}

Väljund:

“Tšilli” elemendiga on ainult üks plaat.

Rida # 21 – rida # 30:

Näide 2: Mitu tingimust

Filtreerime kirjeid asukoha ja koguse atribuutide alusel. Kogus peaks olema suurem kui 50 ja väiksem kui 300. Asukoht peaks olema 'USA'.

Päring on ' alates i riigist_hinnad
kus i.kogus > 50
kus i.kogus <300
kus i.location == 'USA'
vali mina'

//valige, kus kirjeid filtreerida, määrates mitu tingimust
oli andmeid = alates i sisse riigi_hinnad
kus i . kogus > viiskümmend
kus i . kogus < 300
kus i . asukoht == 'USA'
vali i ;

igaühele ( oli i sisse andmeid )
{
konsool . WriteLine ( i . üksus + ' ' + i . asukoht + ' ' + i . kogus + ' ' + i . kulu ) ;

}

Väljund:

Eelmistele tingimustele vastavaid rekordeid on kaks.

Rida # 21 – rida # 32:

Näide 3: Ja (&&) operaator

Saame määrata operaatori 'ja (&&)', et määrata korraga mitu tingimust. Kui kõik tingimused on tõesed, tagastab päring kõigile tingimustele vastavad kirjed.

Selles näites valime kirjed, kui kogus on suurem kui 20 ja maksumus on 67,89.

Päring on ' alates i riigist_hinnad
kus i.kogus < 20 && i.kulu == 67,89
vali mina'

oli andmeid = alates i sisse riigi_hinnad
kus i . kogus < kakskümmend && i . kulu == 67,89
vali i ;

igaühele ( oli i sisse andmeid )
{
konsool . WriteLine ( i . üksus + ' ' + i . asukoht + ' ' + i . kogus + ' ' + i . kulu ) ;

}

Väljund:

On ainult üks rekord, mille kogus on alla 20 ja maksumus 67,89

Rida # 21 – rida # 29:

Näide 4: Või (||) operaator

Operaatorit „või (||)” kasutatakse ka mitme tingimuse korraga määramiseks. Kui vähemalt üks tingimus on tõene, tagastatakse sellele tingimusele vastavad kirjed.

Selles näites valime kirjed, kui kogus on suurem kui 300 või asukoht on 'Tokyo'.

Päring on ' alates i riigist_hinnad
kus i.kogus > 300 || i.location == 'Tokyo'
vali mina'

oli andmeid = alates i sisse riigi_hinnad
kus i . kogus > 300 || i . asukoht == 'Tokyo'
vali i ;

igaühele ( oli i sisse andmeid )
{
konsool . WriteLine ( i . üksus + ' ' + i . asukoht + ' ' + i . kogus + ' ' + i . kulu ) ;

}

Väljund:

On ainult üks kirje, mille kogus on suurem kui 300 (esimene tingimus on vastavuses).

Rida # 21 – rida # 29:

3. Tellimuse järgi

Kui soovite korraldada LINQ-päringu tagastatud kirjed kasvavas või kahanevas järjekorras, lähtudes mis tahes atribuudi väärtustest, saate päringus kasutada operaatorit „järjekorra alusel”. Peate määrama selle operaatori enne operaatorit 'select'.

Süntaks:

Vaatame, kuidas kasutada LINQ-päringus operaatorit 'järjekorra järgi'.

Kasvav järjestus:

alates iteraator sisse Andmeallikas
tellida kõrval iteraator . atribuut tõusev
vali iteraator ;

Kahanev järjekord:

alates iteraator sisse Andmeallikas
tellida kõrval iteraator . atribuut laskuv
vali iteraator ;

Näide 1: Kasvav järjekord

Valige andmeallikast (loendist) kõik atribuudid ja tagastage need kasvavas järjekorras, lähtudes atribuudi koguse väärtustest.

Päring on ' alates i riigist_hinnad
järjestus i.koguse järgi kasvav
vali mina'

oli andmeid = alates i sisse riigi_hinnad
tellida i järgi . kogus tõusev
vali i ;

igaühele ( oli i sisse andmeid )
{
konsool . WriteLine ( i . üksus + ' ' + i . asukoht + ' ' + i . kogus + ' ' + i . kulu ) ;

}

Väljund:

Rida # 21 – rida # 29:

Näide 2: Kahanev järjekord

Valige andmeallikast (loendist) kõik atribuudid ja tagastage need kahanevas järjekorras kuluatribuudi väärtuste alusel.

Päring on ' alates i riigist_hinnad
tellimuse järgi i.kulu kahanevalt
vali mina'

oli andmeid = alates i sisse riigi_hinnad
tellida i järgi . kulu laskuv
vali i ;

igaühele ( oli i sisse andmeid )
{
konsool . WriteLine ( i . üksus + ' ' + i . asukoht + ' ' + i . kogus + ' ' + i . kulu ) ;

}

Väljund:

Rida # 21 – rida # 29:

4. Piirang

SQL-i piirang piirab päringu tagastatavate kirjete arvu. See tagastab päringu poolt tagastatud peamised kirjed. LINQ-is saame selle saavutada, kasutades käsku Skip() koos Take() operaatoriga. Take() saab määratud arvu kirjeid. Skip() kasutatakse kirje algusnumbri määramiseks. Sel viisil saame LINQ-is saavutada 'limiidi' funktsionaalsuse.

Süntaks:

( alates iteraator sisse Andmeallikas
vali iteraator ) . Vahele jätma ( n ) . Võtke ( n ) ;
  1. Skip() kasutatakse kirjete vahelejätmiseks ja ülejäänud kirjete tagastamiseks. See võtab täisarvu, mis määrab vahele jäetavate elementide arvu. Meie puhul on see 0.
  2. Take() kasutatakse 'n' arvu kirjete võtmiseks esimesest kirjest.

Näide:

Valige päringu tagastatud viiest kirjest kolm esimest kirjet.

Päring on ' (alates i riigist_hinnad
vali i).Jäta vahele(0).Võta(3)”

oli andmeid = ( alates i sisse riigi_hinnad
vali i ) . Vahele jätma ( 0 ) . Võtke ( 3 ) ;

igaühele ( oli i sisse andmeid )
{
konsool . WriteLine ( i . üksus + ' ' + i . asukoht + ' ' + i . kogus + ' ' + i . kulu ) ;

}

}

Väljund:

Rida 21 – rida 28:

Järeldus

Õppisime, kuidas kirjutada päringuid C# LINQ-is, mis on sarnane SQL-iga. Selle õpetuse osana arutasime, kuidas kasutada andmeallikast kirjete valimiseks operaatorit „select”. Päringuga tagastatud kirjete filtreerimiseks kasutasime tingimuste täpsustamiseks operaatorit „kus”. Seejärel õppisime, kuidas sorteerida kirjeid, mis päringuga tagastatakse operaatoriga 'järjekorra alusel'. Lõpuks kasutasime kirjete piiramiseks operaatoreid Skip () ja Take ().