Kako koristiti projekcije u C #

Projekcija je operacija koja transformira rezultate upita. Pomoću projekcije možete transformirati objekt u novi obrazac koji ima samo ona svojstva potrebna u vašoj aplikaciji. U ovom ćemo članku pogledati kako možemo raditi s projekcijama u C #.

Da biste radili s primjerima koda iz ovog članka, u sustavu biste trebali instalirati Visual Studio 2019. Ako još nemate kopiju, ovdje možete preuzeti Visual Studio 2019. 

Stvorite projekt aplikacije konzole u Visual Studiju

Prvo, kreirajmo projekt aplikacije .NET Core konzole u Visual Studiju. Pod pretpostavkom da je Visual Studio 2019 instaliran u vašem sustavu, slijedite korake opisane u nastavku da biste stvorili novi projekt aplikacije .NET Core Console u Visual Studio-u.

  1. Pokrenite Visual Studio IDE.
  2. Kliknite "Stvori novi projekt".
  3. U prozoru "Stvori novi projekt" s popisa predložaka odaberite "Aplikacija konzole (.NET Core)".
  4. Kliknite Dalje.
  5. U sljedećem prozoru "Konfiguriranje novog projekta" navedite naziv i mjesto za novi projekt.
  6. Kliknite Stvori.
  7. To će stvoriti novi projektni program konzole .NET Core u Visual Studio 2019. Ovaj ćemo projekt koristiti u sljedećim odjeljcima ovog članka.

Što je projekcija u C #?

Projekcija se odnosi na čin pretvaranja objekta u novi oblik takav da novostvoreni objekt sadrži samo svojstva koja će se koristiti. Jezično integrirani upit (LINQ) pruža podršku za dva standardna operatora projekcije upita, Select i SelectMany.

Pomoću operatora Select i SelectMany možete projicirati jedno svojstvo ili projicirati rezultate upita ili projicirati više svojstava iz izvora podataka u anonimni tip. Možete čak izvoditi proračune, filtriranje ili bilo koje druge operacije na projekciji po potrebi.

U sljedećim odjeljcima ispitat ćemo kako možemo raditi s tim operatorima u C #.

Projekt pomoću operatora Select u C #

U datoteku Program.cs napišite sljedeći kod.

javni razred Autor

{

    javni int Id {get; postavljen; }

    javni niz FirstName {get; postavljen; }

    javni niz LastName {get; postavljen; }

    javni niz Adresa {get; postavljen; }

    javni autor (int id, string firstName,

    string lastName, adresa niza)

    {

        this.Id = id;

        this.FirstName = firstName;

        this.LastName = lastName;

        this.Address = adresa;

    }

}

Sljedeći isječak koda ilustrira kako možete iskoristiti operator Select za traženje podataka.

var autori = novi Popis

{

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

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

   novi autor (3, "Steve", "Smith", "Ohio, USA"),

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

};

foreach (naziv imena kod autora. Odaberi (e => e.Prvo ime))

{

   Console.WriteLine (ime);

}

Kada izvršite gornji isječak koda, na prozoru konzole prikazat će se imena svih autora.

Projekt na anonimne tipove u C #

Možete projicirati više svojstava iz izvora podataka, čak možete i projicirati na anonimni tip. Sljedeći isječak koda ilustrira kako možete projicirati više svojstava u anonimni tip.

var podaci = autori.Select (e => new {e.FirstName, e.LastName});

Projekt pomoću operatora SelectMany u C #

Možete iskoristiti operator SelectMany za traženje podataka iz zbirke koja implementira IEnumerable sučelje. Operator SelectMany možete koristiti kada želite tražiti podatke iz nekoliko zbirki i projicirati ih ili izravnati u jedan slijed.

Imajte na umu da i Select i SelectMany daju rezultat iz izvornih vrijednosti. Dok Select proizvodi jedan rezultat iz svake izvorne vrijednosti, SelectMany proizvodi ujedinjenu podzbirku iz svake izvorne vrijednosti.

Uključimo sada dodatno svojstvo u klasu Author pod nazivom Subjects. Ovo je svojstvo popis nizova koji sadrže imena predmeta o kojima autor piše knjige.

javni razred Autor

    {

        javni int Id {get; postavljen; }

        javni niz FirstName {get; postavljen; }

        javni niz LastName {get; postavljen; }

        javni niz Adresa {get; postavljen; }

        Predmeti s javnog popisa {get; postavljen; }

        javni autor (int id, string firstName, string lastName,

        adresa niza, popis predmeta)

        {

            this.Id = id;

            this.FirstName = firstName;

            this.LastName = lastName;

            this.Address = adresa;

            this.Subjects = subjekti;

        }

    }

Sljedeći isječak koda možete koristiti za stvaranje popisa autora.

var autori = novi Popis

{

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

    novi popis {"C #", "F #"}),

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

    novi popis {"C #", "VB.NET"}),

    novi autor (3, "Steve", "Smith", "Ohio, USA", 

    novi popis {"C #", "C ++"}),

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

    novi popis {"C #", "VB.NET"}),

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

    novi popis {"C #", "C ++"})

 };

I možete koristiti isječak koda u nastavku da biste dohvatili nazive programskih jezika o kojima autori pišu knjige.

var podaci = autori.SelectMany (a => a.Subjects) .Distinct ();

foreach (var subjekt u podacima)

{

    Console.WriteLine (tema);

}

Upotrijebite operator Where za filtriranje podataka rezultata u C #

Možete primijeniti operator Where nakon SelectMany za filtriranje skupa rezultata. Sljedeći isječak koda kada se izvrši prikazuje Ime i Predmet autora čije Ime započinje znakom "J" i boravi u Velikoj Britaniji

var podaci = autori

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

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

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

foreach (autor u podacima)

{

    Console.WriteLine (autor);

}

Kada izvršite gornji isječak koda, trebali biste vidjeti izlaz u prozoru konzole kao što je prikazano na donjoj slici zaslona.

Projekcije se mogu koristiti tijekom rada s EF Core, tako da možete dohvatiti samo stupce iz osnovne baze podataka koja vam je potrebna za vašu aplikaciju. U budućem članku ovdje ću razgovarati o nekim naprednim operacijama pomoću projekcija kao što su projekcije jedan-prema-više, filtriranje rezultata i poredak.