Programovanie

Ako používať projekcie v C #

Projekcia je operácia, ktorá transformuje výsledky dotazu. Projekciu môžete použiť na transformáciu objektu do nového tvaru, ktorý má iba tie vlastnosti, ktoré vaša aplikácia potrebuje. V tomto článku sa pozrieme na to, ako môžeme pracovať s projekciami v C #.

Ak chcete pracovať s príkladmi kódu uvedenými v tomto článku, mali by ste mať vo svojom systéme nainštalovanú aplikáciu Visual Studio 2019. Ak ešte nemáte kópiu, môžete si tu stiahnuť Visual Studio 2019.

Vytvorte projekt konzolovej aplikácie v Visual Studio

Najprv si vytvoríme projekt konzolovej aplikácie .NET Core v Visual Studio. Za predpokladu, že je vo vašom systéme nainštalované Visual Studio 2019, postupujte podľa krokov uvedených nižšie a vytvorte nový projekt konzolovej aplikácie .NET Core v Visual Studio.

  1. Spustite Visual Studio IDE.
  2. Kliknite na „Vytvoriť nový projekt“.
  3. V okne „Vytvoriť nový projekt“ vyberte zo zobrazeného zoznamu šablón „Console App (.NET Core)“.
  4. Kliknite na Ďalej.
  5. V nasledujúcom okne „Konfigurácia nového projektu“ zadajte názov a umiestnenie nového projektu.
  6. Kliknite na tlačidlo Vytvoriť.
  7. Týmto sa vytvorí nový projekt konzolovej aplikácie .NET Core v Visual Studio 2019. Tento projekt použijeme v ďalších častiach tohto článku.

Čo je to projekcia v C #?

Projekcia označuje akt transformácie objektu do novej formy tak, že novovytvorený objekt obsahuje iba vlastnosti, ktoré sa použijú. Language Integrated Query (LINQ) poskytuje podporu pre dva štandardné operátory projekcie dotazov, Select a SelectMany.

Môžete použiť operátory Select a SelectMany na premietnutie jednej vlastnosti alebo na premietnutie výsledkov dotazu alebo na premietnutie viacerých vlastností zo zdroja údajov do anonymného typu. Podľa potreby môžete na projekcii dokonca vykonať výpočty, filtrovanie alebo iné operácie.

V nasledujúcich častiach preskúmame, ako môžeme pracovať s týmito operátormi v C #.

Projektujte pomocou operátora Select v C #

Do súboru Program.cs napíšte nasledujúci kód.

verejná trieda Autor

{

public int Id {get; sada; }

verejný reťazec FirstName {get; sada; }

verejný reťazec Priezvisko {get; sada; }

public string Adresa {get; sada; }

public Author (int id, string firstName,

reťazec priezvisko, adresa reťazca)

    {

this.Id = id;

this.FirstName = meno;

this.LastName = priezvisko;

this.Address = adresa;

    }

}

Nasledujúci úryvok kódu ilustruje, ako môžete využiť operátor Select na dopytovanie údajov.

var autorov = nový Zoznam

{

nový autor (1, "Joydip", "Kanjilal", "Hyderabad, INDIA"),

nový autor (2, "Anand", "Naraswamy", "Cochin, INDIA"),

nový autor (3, „Steve“, „Smith“, „Ohio, USA“),

nový autor (4, "Uday", "Denduluri", "London, UK")

};

foreach (var meno u autorov. Vyberte (e => e.prve meno))

{

Console.WriteLine (názov);

}

Po vykonaní fragmentu kódu vyššie sa v okne konzoly zobrazia krstné mená všetkých autorov.

Premietanie na anonymné typy v C #

Zo zdroja údajov môžete projektovať viac ako jednu vlastnosť, dokonca môžete projektovať aj anonymný typ. Nasledujúci úryvok kódu ilustruje, ako môžete premietnuť viac vlastností do anonymného typu.

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

Projektujte pomocou operátora SelectMany v C #

Môžete využiť operátor SelectMany na dopytovanie údajov z kolekcie, ktorá implementuje rozhranie IEnumerable. Operátor SelectMany môžete použiť, ak chcete dopytovať údaje z niekoľkých kolekcií a projektovať ich alebo ich zlúčiť do jednej sekvencie.

Upozorňujeme, že Select aj SelectMany vytvárajú výsledok zo zdrojových hodnôt. Zatiaľ čo Select vytvára z každej zdrojovej hodnoty jeden výsledok, SelectMany z každej zdrojovej hodnoty vytvára zreťazený podzber.

Poďme teraz zahrnúť ďalšiu vlastnosť do triedy Autor s názvom Predmety. Táto vlastnosť je zoznamom reťazcov, ktoré obsahujú názvy predmetov, o ktorých autor píše knihy.

verejná trieda Autor

    {

public int Id {get; sada; }

verejný reťazec FirstName {get; sada; }

verejný reťazec Priezvisko {get; sada; }

public string Adresa {get; sada; }

verejné predmety zoznamu {get; sada; }

public Author (int id, string firstName, string lastName,

adresa reťazca, zoznam predmetov)

        {

this.Id = id;

this.FirstName = meno;

this.LastName = priezvisko;

this.Address = adresa;

this.Subjects = Subjects;

        }

    }

Nasledujúci útržok kódu môžete použiť na vytvorenie zoznamu autorov.

var autorov = nový Zoznam

{

nový autor (1, "Joydip", "Kanjilal", "Hyderabad, INDIA",

nový zoznam {"C #", "F #"}),

nový autor (2, "Anand", "Naraswamy", "Cochin, INDIA",

nový zoznam {"C #", "VB.NET"}),

nový autor (3, „Steve“, „Smith“, „Ohio, USA“,

nový zoznam {"C #", "C ++"}),

nový autor (4, "Uday", "Denduluri", "London, UK",

nový zoznam {"C #", "VB.NET"}),

nový autor (5, „Jane“, „Barlow“, „London, UK“,

nový zoznam {"C #", "C ++"})

 };

Fragment kódu nižšie môžete použiť na získanie názvov programovacích jazykov, o ktorých autori píšu knihy.

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

foreach (rôzny predmet údajov)

{

Console.WriteLine (predmet);

}

Na filtrovanie výsledných údajov v C # použite operátor Where.

Môžete použiť operátor Where po SelectMany na filtrovanie sady výsledkov. Nasledujúci úryvok kódu pri spustení zobrazuje meno a predmet autora, ktorého meno začína znakom „J“ a býva vo Veľkej Británii.

var data = autori

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

.SelectMany (a => a. Predmety, (a, Predmet) => nové {a. Prvé meno, Predmet})

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

foreach (var autor v dátach)

{

Console.WriteLine (autor);

}

Po vykonaní vyššie uvedeného útržku kódu by ste mali vidieť výstup v okne konzoly, ako je to znázornené na obrázku na obrazovke nižšie.

Pri práci s EF Core sa dajú použiť projekcie, takže môžete načítať iba stĺpce z podkladovej databázy, ktoré potrebujete pre svoju aplikáciu. V budúcom článku tu budem diskutovať o niektorých pokročilých operáciách využívajúcich projekcie, ako sú projekcie jedna k mnohým, filtrovanie výsledkov a objednávanie.

$config[zx-auto] not found$config[zx-overlay] not found