vizsgálati módszereket

vizsgálati módszereket

A könyv célja, hogy egy széles körű iránt érdeklődő olvasók programozás C # .Vvedite rövid összefoglalót itt

Könyv: C # 4.0: Átfogó útmutató

vizsgálati módszereket

Szakaszok ezen az oldalon:

lekérdezési szintaxis leírt Az előző szakaszokban alkalmazunk a kialakulása legtöbb lekérdezés C #. Ez kényelmes, hatékony és kompakt, de nem az egyetlen módja annak, hogy a lekérdezés. Egy másik módszer, hogy a lekérdezés technikákat. amelynek oka lehet bármely számlálására tárgy, például tömb.

Alapvető módszerek lekérdezés

lekérdezési módszerek meghatározása az osztályban, és System.Linq.Enumerable végrehajtani kiterjesztése módszerek funkciók általános formája IEnumerable interfész. (Query módszerek meghatározott System.Linq.Queryable osztályban. Kiterjeszti a funkciókat a generalizált forma IQueryable interfész. de ez a felület az ebben a fejezetben nem foglalkozunk.) kiterjesztése módszer kiegészíti a feladatok egy másik osztály, de anélkül, hogy örökséget. Hosszabbító módszereket vezettek be a C # 3.0 verzió és tárgyalja részletesebben később ebben a fejezetben. Addig elég annyit mondani, hogy a kérés módszereket is lehet nevezni csak azokat az objektumokat, amelyek megfelelnek a IEnumerable interfész .

A Enumerable osztály ad egy csomó lekérdezési módszerek, de az alapvető módszerek azok, amelyek megfelelnek a lekérdezés a fent leírt szereplők. Ezek a módszerek az alább felsorolt, valamint az egyes szolgáltatók a lekérdezés. Ugyanakkor nem szabad megfeledkezni arról, hogy ezek a módszerek is már túlterhelt formában, de itt vannak képviselte csak a legegyszerűbb formában. De ez a formában használják a leggyakrabban.

Az egyenértékű lekérdezésoperátor kérés eljárás
válassza a Select (választó)
ahol: ahol (predikátum)
orderby OrderBy (keySelector) vagy
OrderByDescending (keySelector)
csatlakozzon be (belső, outerKeySelector,
innerKeySelector, resultSelector)
csoport GroupBy (keySelector)

Kivéve be () metódust. Egyéb kérés módszereket vesz egy érv, amely egy tárgy egyes fajok az általános típus Func. Ez a fajta beépített küldötte kijelentette az alábbiak szerint:

megbízottja TResult Func(T arg)

ahol jelöli TResult eredmény típusa, amely lehetővé teszi a küldött, és a T - típusú elem. A módszerek lekérdezési paramétereket választó. keySelector állítmányt vagy meghatározza egy akció, hogy azon a lekérdezés módszer. Például, az eljárás Ahol () predikátum argumentum határoz meg eljárást kiválasztására az adatokat a kérést. Minden lekérdezés eljárás visszatér egy felsorolható objektumot. Ezért, az eredmény egy lekérdezés módszer alkalmazható a hívás egy másik, összekötő ezek a módszerek a láncban.

Csatlakozzon () metódus négy érv. Az első argumentum (belső) egy hivatkozás a második egyesítjük szekvencia egy első szekvencia, amely által okozott be () módszer. Választó gombot az első szekvenciában mint argumentum outerKeySelector, egy választó gombot a második szekvencia - mint innerKeySelector érv. Az eredmény a kombinálásával resultSelector kijelölt érv. outerKeySelector érv típusú Func. innerKeySelector érv - típusú Func. mivel resultSelector érv - típusú Func. ahol TOuter - az elem típusát a hívó szekvencia; Bádogos - az elem típusát a továbbított szekvencia; TResult - az elem típusát az egyesülő eredményt a szekvenciát visszaadott felsorolásosztályok objektumot.

Argumentum kérés eljárás olyan eljárás, amely összeegyeztethető az alakja jelzi tudjanak küldöttet. de nem kell kifejezetten kijelenti módszerekkel. Sőt, ahelyett, gyakran használják a lambda kifejezés. Amint azt a 15. fejezet lambda egy egyszerű, de hatékony módon történő meghatározása, hogy lényegében névtelen módszert, és a C # fordító automatikusan konvertálja a lambda expressziós hogy olyan formában, hogy lehet továbbítani, mint a paraméter küldötte tudjanak. Annak a ténynek köszönhetően, hogy a lambda kifejezések egy egyszerű és hatékony módja a programozás, ezeket használják a bemutatott példák később ebben a fejezetben.

Formation kérések kérés módszerek

Segítségével lekérdezést technikák egyidejűleg lambda kifejezéseket generálhat lekérdezéseket, általában anélkül, szintaxis kikötött C # lekérdezések. Ehelyett, akkor hívja a megfelelő kérelmet módszereket. Hivatkozva először az egy egyszerű példát. Ez egy változata az első példa a program az ebben a részben, átalakított alkalmazását demonstráljuk Amennyiben kérelmet (), és válassza () helyett a megfelelő üzemeltetők.

// A lekérdezési módszerek a kialakulásának egy egyszerű lekérdezést.
// Ez egy újratervezett változata az első minta program ebben a fejezetben.
using System;
használatával System.Linq;
osztály SimpQuery
static void Main ()
int [] nums = <1, -2, 3, 0, -4, 5>;
// Felhasználási módszerek Ahol (), és válassza a ()
// kialakulhatna egy egyszerű lekérdezést.
var posNums = nums.Where (n => n> 0) lehetőségre.Válassza (r => R);
Console.Write ( „A pozitív értékek a tömb nums:”);
// Futtassa a lekérdezést, és megjeleníti az eredményeket,
foreach (int i in posNums) Console.Write (i + "");
Console.WriteLine ();
>
>

Ez a verzió ugyanaz a hatása, mint az eredeti.

A pozitív értékek a tömb nums: 1 3 5

Fordítson különös figyelmet ebben a programban, hogy a következő kódsort.

var posNums = nums.Where (n => n> 0) lehetőségre.Válassza (r => R);

Ebben a sorban a kódot generál keresett tárolt változó posNums. Ez a kérés, viszont van kialakítva sorozat A pozitív értékek, lekért egy tömb nums. Erre a célra a Ha () metódust. adja meg a kívánt értéket, majd a Select () metódust. szelektíven alkotó a végeredmény értékek. Ahol () módszer lehet nevezni, hogy a tömb nums. mert minden tömb végre IEnumerable interfész. támogatja a lekérdezés kibővítését módszerekkel.

Formálisan Válassza () metódus a példában nincs szükség, mivel ez egy egyszerű lekérdezést. Miután szekvencia által visszaadott Ahol (). már tartalmazza a végeredményt. De a végső választás lehet bonyolultabb kritériumok ahogy azt a korábbiakban a példákat a lekérdezés szintaxist. Ennek megfelelően, a következő kérést a tömb hátsó nums pozitív érték, emelkedett egy nagyságrenddel.

var posNums = nums.Where (n => n> 0) lehetőségre.Válassza (r => r * 10);

Amint az várható, a lánc lehet kombinálni, és egyéb műveletek A kapott adatok kérésre. Például, a következő lekérdezés kiválasztja pozitív értékeket, amelyeket azután rendezve csökkenő és visszatérnek a kapott szekvenciával:

var posNums = nums.Where (n => n> 0) .OrderByDescending (j => j);

ahol az expressziós J => j jelöli, hogy a rendelési függő bemeneti paraméter, hogy egy eleme az adatok kapott szekvencia a módszer Amennyiben ().

Az alábbi példa bemutatja a bejelentési kérelmet módszer GroupBy (). Ez a módosított változata a bemutatott példa korábban.

// Mutassa használata GroupBy kérés () metódust.
// Ez egy módosított változatát például a korábban bemutatott
// mutatni a lekérdezés szintaxist.
using System;
használatával System.Linq;
osztály GroupByDemo
static void Main ()
string [] honlapok =
"HsNameA.com", "hsNameB.net", "hsNameC.net"
"HsNameD.com", "hsNameE.org", "hsNameF.org"
"HsNameG.tv", "hsNameH.net", "hsNamel.tv"
>;
// A lekérdezési módszereket csoporthoz
// webhely nevét a felső szintű domain.
var webAddrs = websites.Where (w => w.LastIndexOf ( '')! = 1).
GroupBy (X => x.Substring (x.LastIndexOf (, x.Length)) "");
// Végezze lekérdezés eredményét, és azokat, foreach (var helyek webAddrs)
foreach (var helyek webAddrs)
Console.WriteLine ( „weboldalak csoportosítva” +
"Domain név" + sites.Key);
foreach (var helyén helyek)
Console.WriteLine ( "" + helyén);
Console.WriteLine ();
>
>
>

Ez a változat a program lehetőséget ad ugyanazt az eredményt, mint az előzőt. Az egyetlen különbség a kettő között az, hogy a kérés keletkezik. Ebben a verzióban, erre a célra, kérjen módszerekkel.

Tekintsük egy másik példát. De először nézzük ismét kérheti a korábban bemutatott példa alkalmazás csatlakozni operátor.

var inStockList = jogcím a terméket
csatlakozzon bejegyzés statusList
A item.ItemNumber egyenlő entry.ItemNumber
válassza ki az új Temp (item.Name, entry.InStock);

Ez a kérés keletkezik sorozata, amely az objektumok körülvenni a termék nevét, és az állam az állomány a raktárban. Mindez az információ kombinálásával kapott a két adatforrás: tételek és statusList. Az alábbiakban egy átalakított változata a kérelmet, amely ahelyett, hogy a szintaxis nyújtott C # lekérdezések be () kérés módszert alkalmazzák.

// A be () metódus a kérelmet a listát
// nevét az áruk és a feltétele, hogy a készletek a raktárban,
var inStockList = items.Join (statusList,
kl => kl.ItemNumber,
k2 => k2.ItemNumber,
(Kl, K2) => új Temp (kl.Name, k2.InStock));

Ebben a kiviteli alakban, Hőm elemzi osztály tárolására használjuk a kapott objektumot, hanem lehet használni a névtelen típusú. Az ilyen kérés formájában az alábbiakban közöljük.

A szintaxis lekérdezések és lekérdezési módszerek

Amint az az előző részben, lekérdezéseket C # képezhető két módon, a lekérdezés szintaxisa vagy lekérdezési módszerek. Érdekes, hogy mindkét módszer kapcsolódnak egymáshoz jobban, mint amilyennek tűnik, nézi a forráskódot. Az a tény, hogy a lekérdezés szintaxis összeállítani egy hívás kérése módszerekkel. Ezért a kódot

Úgy kell átalakítani a fordítóprogram a következő kihívás.

Így mind a folyamatot alkotó lekérdezések végül konvergálnak ugyanaz.

De ha mindkét módszer végső soron azonos, akkor melyik a jobb programozás C #? Általában azt javasoljuk nagyobb mértékben alkalmazzák a lekérdezés szintaxisa, mert teljesen integrálódott a C # nyelv által támogatott releváns kulcsszavak és szintaxis.

További módszerek terjeszkedéssel összefüggő kérdések

Amellett, hogy a módszereket, amelyek megfelelő lekérdezési operátorok által támogatott C #, amelynek etsya számos más mellék kapcsolódó módszereket a kérelmet, és gyakran segít létrehozni lekérdezéseket. Ezek a módszerek állnak rendelkezésre a .NET-keretrendszer, és vannak definiálva IEnumerable interfész által Enumerable osztályban. A leggyakrabban használt tágulási módszerekkel kapcsolatos kérelmet. Sokan közülük is túlterhelt, így úgy tűnik, csak a legáltalánosabb értelemben.

módszer leírása
Minden (állítmány) Boolean a visszatérési értéke true,
ha az összes elemet a szekvenciában
megfelelnek a feltétel
állítmány
Bármely (állítmány) Boolean a visszatérési értéke igaz, ha
minden eleme a sorozat kielégíti
Feltétel készlet parametrompredicate
Átlagos () Visszaadja az átlagos összes számértékek
sorozat
Tartalmaz (érték) függvény egy logikai érték igaz, ha
szekvenciát tartalmazott az említett tárgy
Count () visszaadja a szekvencia hossza, azaz
száma az azt alkotó elemek
Első () Visszaadja az első elemet a sorozat
Az utolsó () Visszaadja az utolsó elem a sorozatban
Max () legnagyobb értékét adja
sorozat
Min () függvény legkisebb értékét
sorozat
Sum () Visszaadja az összeget a számértékek
sorozat

Count () metódus már bizonyította korábban ebben a fejezetben. A Az alábbi program mutatja a másik mellék módszerekkel kapcsolatos kéréseket.

// használata egy sor kiterjesztése módszerek meghatározása a Enumerable osztályban.
using System;
használatával System.Linq;
osztály ExtMethods
static void Main ()
int [] nums = <3, 1, 2, 5, 4>;
Console.WriteLine ( "minimális érték" + nums.Min ());
Console.WriteLine ( "maximális értéke" + nums.Max ());
Console.WriteLine ( "Az első érték a" + nums.First ());
Console.WriteLine ( "Az utolsó érték" + nums.Last ());
Console.WriteLine ( "A teljes érték" + nums.Sum ());
Console.WriteLine ( "Az átlagos érték a" + nums.Average ());
ha (nums.All (n => n> 0))
Console.WriteLine ( „Minden érték nagyobb, mint nulla.”);
ha (nums.Any (n => (n% 2) == 0))
Console.WriteLine ( „Legalább egy érték páros szám.”);
ha (nums.Contains (3))
Console.WriteLine ( „3. A tömb tartalmazza az érték”);
>
>

Ez az, amit az eredményeket a e program végrehajtását.

A minimális érték 1
A maximális érték 5
Az első érték egyenlő 3
Az utóbbi érték egyenlő 4
A teljes érték egyenlő 15
Az átlagos érték egyenlő 3
Minden érték nagyobb, mint nulla.
Legalább egy érték páros
A tömb tartalmazza az értéket 3.

Extension módszerekkel kapcsolatos kérdések, akkor is lehet használni a lekérdezés alapján a keresési lekérdezés szintaxis nyújtott C #. És valóban ez történik túl gyakran. Például, Átlagos () módszert használjuk a következő program kapjunk szekvencia olyan, amely csak azokat az értékeket, amelyek kisebbek, mint az átlagos összes értékeinek a tömbben.

Amikor futtatja a programot a következő kimenetet produkálja.

Az átlagos érték 5,6
Az értékek alacsonyabbak, mint az átlagos 1 2 4 3

Fordítson különös figyelmet a program az alábbi kód kérése.

Mint látható, az x változó egy let utasítás van rendelve az átlagos összes tömb elemeinek nums. Ezt az értéket úgy kapjuk meg, hívja Átlagos () eljárás egy tömb nums.

Kapcsolódó cikkek