Programiranje

Kako uporabljati projekcije v C #

Projekcija je operacija, ki spremeni rezultate poizvedbe. Projekcijo lahko uporabite za pretvorbo predmeta v nov obrazec, ki ima samo tiste lastnosti, ki so potrebne v vaši aplikaciji. V tem članku bomo preučili, kako lahko delamo s projekcijami v C #.

Če želite delati s primeri kod v tem članku, morate imeti v sistemu nameščen Visual Studio 2019. Če kopije še nimate, lahko Visual Studio 2019 prenesete tukaj.

Ustvarite projekt aplikacije za konzolo v Visual Studio

Najprej ustvarimo aplikacijski projekt konzole .NET Core v Visual Studio. Če predpostavimo, da je Visual Studio 2019 nameščen v vašem sistemu, sledite spodnjim korakom, da v Visual Studio ustvarite nov aplikacijski projekt .NET Core Console.

  1. Zaženite Visual Studio IDE.
  2. Kliknite »Ustvari nov projekt«.
  3. V oknu »Ustvari nov projekt« na seznamu predlog izberite »Console App (.NET Core)«.
  4. Kliknite Naprej.
  5. V naslednjem oknu »Konfiguriranje novega projekta« določite ime in mesto novega projekta.
  6. Kliknite Ustvari.
  7. Tako boste ustvarili nov aplikacijski projekt konzole .NET Core v Visual Studio 2019. Ta projekt bomo uporabili v naslednjih razdelkih tega članka.

Kaj je projekcija v C #?

Projekcija se nanaša na dejanje pretvorbe predmeta v novo obliko, tako da novo ustvarjeni objekt vsebuje samo lastnosti, ki bodo uporabljene. Jezikovno integrirana poizvedba (LINQ) nudi podporo za dva standardna operaterja projekcije poizvedb, Select in SelectMany.

Z operaterjema Select in SelectMany lahko projicirate eno lastnost ali projicirate rezultate poizvedbe ali projicirate več lastnosti iz podatkovnega vira v anonimno vrsto. Po potrebi lahko na projekciji izvajate tudi izračune, filtriranje ali katere koli druge operacije.

V naslednjih razdelkih bomo preučili, kako lahko delamo s temi operaterji v C #.

Projekt z uporabo operatorja Select v C #

V datoteko Program.cs zapišite naslednjo kodo.

javni razred Avtor

{

public int Id {get; set; }

javni niz FirstName {get; set; }

javni niz LastName {get; set; }

javni niz Naslov {get; set; }

javni avtor (int id, niz firstName,

string lastName, naslov niza)

    {

this.Id = id;

this.FirstName = firstName;

this.LastName = lastName;

this.Address = naslov;

    }

}

Naslednji delček kode ponazarja, kako lahko za poizvedbo podatkov izkoristite operator Select.

var avtorji = nov seznam

{

novi avtor (1, "Joydip", "Kanjilal", "Hyderabad, INDIA"),

novi avtor (2, "Anand", "Naraswamy", "Cochin, INDIA"),

novi avtor (3, "Steve", "Smith", "Ohio, ZDA"),

novi avtor (4, "Uday", "Denduluri", "London, UK")

};

foreach (ime var pri avtorjih. Izberite (e => e.FirstName))

{

Console.WriteLine (ime);

}

Ko zaženete zgornji delček kode, bodo v oknu konzole prikazana imena vseh avtorjev.

Projektirajte na anonimne vrste v jeziku C #

Iz vira podatkov lahko projicirate več kot eno lastnost, lahko tudi na anonimni tip. Naslednji delček kode prikazuje, kako lahko več lastnosti projicirate v anonimni tip.

var podatki = avtorji.Izberite (e => novo {e.FirstName, e.LastName});

Projektirajte z operaterjem SelectMany v jeziku C #

Operator SelectMany lahko izkoristite za poizvedovanje po podatkih iz zbirke, ki izvaja vmesnik IEnumerable. Operator SelectMany lahko uporabite, kadar želite poizvedovati po podatkih iz več zbirk in jih projicirati ali poravnati v eno zaporedje.

Upoštevajte, da tako Select kot SelectMany proizvajata rezultat iz izvornih vrednosti. Medtem ko Select iz vsake izvorne vrednosti ustvari en rezultat, SelectMany iz vsake izvorne vrednosti ustvari združeno podzbirko.

Vključimo zdaj dodatno lastnost v razred Avtor z imenom Predmeti. Ta lastnost je seznam nizov, ki vsebujejo imena predmetov, o katerih avtor piše knjige.

javni razred Avtor

    {

public int Id {get; set; }

javni niz FirstName {get; set; }

javni niz LastName {get; set; }

javni niz Naslov {get; set; }

javni seznam predmetov {get; set; }

javni avtor (int id, niz firstName, string lastName,

niz naslovov, seznam predmetov)

        {

this.Id = id;

this.FirstName = firstName;

this.LastName = lastName;

this.Address = naslov;

this.Subjects = subjekti;

        }

    }

S sledečim delčkom kode lahko ustvarite seznam avtorjev.

var avtorji = nov seznam

{

novi avtor (1, "Joydip", "Kanjilal", "Hyderabad, INDIA",

nov seznam {"C #", "F #"}),

novi avtor (2, "Anand", "Naraswamy", "Cochin, INDIA",

nov seznam {"C #", "VB.NET"}),

novi avtor (3, "Steve", "Smith", "Ohio, ZDA",

nov seznam {"C #", "C ++"}),

novi avtor (4, "Uday", "Denduluri", "London, UK",

nov seznam {"C #", "VB.NET"}),

novi avtor (5, "Jane", "Barlow", "London, UK",

nov seznam {"C #", "C ++"})

 };

Spodnji delček kode lahko uporabite za iskanje imen programskih jezikov, o katerih avtorji pišejo knjige.

var podatki = avtorji.SelectMany (a => a.Subjects) .Distinct ();

foreach (spremenljivka v podatkih)

{

Console.WriteLine (zadeva);

}

Uporabite operator Where za filtriranje podatkov o rezultatih v C #

Za filtriranje nabora rezultatov lahko uporabite operater Where po SelectMany. Naslednji delček kode, ko se izvede, prikaže FirstName in Subject avtorja, katerega FirstName se začne z znakom "J" in prebiva v Združenem kraljestvu.

var podatki = avtorji

.Kje (a => a.Address.IndexOf ("UK")> = 0)

.SelectMany (a => a.Subjects, (a, Subject) => novo {a.FirstName, Subject})

.Kje (n => n.FirstName.StartsWith ("J"));

foreach (avtor avtor v podatkih)

{

Console.WriteLine (avtor);

}

Ko zaženete zgornji delček kode, bi morali videti izhod v oknu konzole, kot je prikazano na spodnji sliki zaslona.

Pri delu z EF Core lahko uporabite projekcije, tako da lahko iz osnovne baze podatkov, ki jo potrebujete za svojo aplikacijo, pridobite samo stolpce. V prihodnjem članku bom razpravljal o nekaterih naprednih operacijah z uporabo projekcij, kot so projekcije ena proti več, filtriranje rezultatov in razvrščanje.