Programmering

Sådan bruges fremspring i C #

Projektion er en operation, der transformerer resultaterne af en forespørgsel. Du kan bruge projektion til at omdanne et objekt til en ny form, der kun har de egenskaber, der er nødvendige i din applikation. I denne artikel ser vi på, hvordan vi kan arbejde med fremskrivninger i C #.

For at arbejde med kodeeksemplerne i denne artikel skal du have Visual Studio 2019 installeret i dit system. Hvis du ikke allerede har en kopi, kan du downloade Visual Studio 2019 her.

Opret et konsolapplikationsprojekt i Visual Studio

Lad os først oprette et .NET Core-konsolapplikationsprojekt i Visual Studio. Forudsat at Visual Studio 2019 er installeret i dit system, skal du følge nedenstående trin for at oprette et nyt .NET Core Console Application-projekt i Visual Studio.

  1. Start Visual Studio IDE.
  2. Klik på "Opret nyt projekt."
  3. I vinduet "Opret nyt projekt" skal du vælge "Konsolapp (.NET Core)" fra listen over skabeloner, der vises.
  4. Klik på Næste.
  5. I vinduet "Konfigurer dit nye projekt", der vises nedenfor, skal du angive navnet og placeringen for det nye projekt.
  6. Klik på Opret.
  7. Dette opretter et nyt .NET Core-konsolapplikationsprojekt i Visual Studio 2019. Vi bruger dette projekt i de efterfølgende afsnit i denne artikel.

Hvad er projektion i C #?

Projektion henviser til handlingen med at omdanne et objekt til en ny form, således at det nyoprettede objekt kun indeholder de egenskaber, der vil blive brugt. Language Integrated Query (LINQ) understøtter to standardforespørgselsprojektionsoperatører, Select og SelectMany.

Du kan bruge Select- og SelectMany-operatorerne til at projicere en enkelt ejendom eller projicere resultaterne af en forespørgsel eller projicere flere egenskaber fra en datakilde til en anonym type. Du kan endda udføre beregninger, filtrering eller andre operationer på en projektion efter behov.

I de efterfølgende afsnit undersøger vi, hvordan vi kan arbejde med disse operatører i C #.

Projekter ved hjælp af Select-operatoren i C #

Skriv følgende kode inde i Program.cs-filen.

offentlig klasse Forfatter

{

public int Id {get; sæt; }

offentlig streng Fornavn {get; sæt; }

public string LastName {get; sæt; }

public string Address {get; sæt; }

offentlig forfatter (int id, streng fornavn,

streng efternavn, streng adresse)

    {

this.Id = id;

this.FirstName = fornavn;

this.LastName = efternavn;

this.Address = adresse;

    }

}

Følgende kodestykke illustrerer, hvordan du kan udnytte Select-operatøren til at forespørge om data.

var forfattere = ny liste

{

ny forfatter (1, "Joydip", "Kanjilal", "Hyderabad, INDIEN"),

ny forfatter (2, "Anand", "Naraswamy", "Cochin, INDIEN"),

ny forfatter (3, "Steve", "Smith", "Ohio, USA"),

ny forfatter (4, "Uday", "Denduluri", "London, UK")

};

foreach (var navn hos forfattere. Vælg (e => e.FirstName))

{

Console.WriteLine (navn);

}

Når du udfører kodestykket ovenfor, vises fornavnene på alle forfatterne i konsolvinduet.

Projekter til anonyme typer i C #

Du kan projicere mere end en ejendom fra en datakilde, du kan endda projicere til en anonym type også. Følgende kodestykke illustrerer, hvordan du kan projicere flere egenskaber til en anonym type.

var data = forfattere.Vælg (e => ny {e.FirstName, e.LastName});

Projekter ved hjælp af SelectMany-operatøren i C #

Du kan drage fordel af SelectMany-operatøren til at forespørge på data fra en samling, der implementerer den IE-nummerbare grænseflade. Du kan bruge SelectMany-operatoren, når du vil forespørge på data fra flere samlinger og projicere eller flade dem i en enkelt sekvens.

Bemærk, at både Select og SelectMany producerer et resultat fra kildeværdier. Mens Select producerer et enkelt resultat fra hver kildeværdi, producerer SelectMany en sammenkædet undersamling fra hver kildeværdi.

Lad os nu medtage en ekstra ejendom i forfatterklassen ved navn Emner. Denne egenskab er en liste over strenge, der indeholder navnene på de emner, forfatteren skriver bøger om.

offentlig klasse Forfatter

    {

public int Id {get; sæt; }

offentlig streng Fornavn {get; sæt; }

public string LastName {get; sæt; }

public string Address {get; sæt; }

offentlige emner på listen {get; sæt; }

offentlig forfatter (int id, streng fornavn, streng efternavn,

strengadresse, listeemner)

        {

this.Id = id;

this.FirstName = fornavn;

this.LastName = efternavn;

this.Address = adresse;

dette.Fag = emner;

        }

    }

Du kan bruge følgende kodestykke til at oprette en liste over forfattere.

var forfattere = ny liste

{

ny forfatter (1, "Joydip", "Kanjilal", "Hyderabad, INDIEN",

ny liste {"C #", "F #"}),

ny forfatter (2, "Anand", "Naraswamy", "Cochin, INDIEN",

ny liste {"C #", "VB.NET"}),

ny forfatter (3, "Steve", "Smith", "Ohio, USA",

ny liste {"C #", "C ++"}),

ny forfatter (4, "Uday", "Denduluri", "London, UK",

ny liste {"C #", "VB.NET"}),

ny forfatter (5, "Jane", "Barlow", "London, UK",

ny liste {"C #", "C ++"})

 };

Og du kan bruge kodestykket nedenfor til at hente navnene på de programmeringssprog, som forfatterne skriver bøger om.

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

foreach (var emne i data)

{

Console.WriteLine (emne);

}

Brug Where-operatoren til at filtrere resultatdata i C #

Du kan anvende Where-operatøren efter SelectMany til at filtrere resultatsættet. Følgende kodestykke, når det udføres, viser fornavnet og emnet for forfatteren, hvis fornavn starter med tegnet "J" og er bosat i Storbritannien.

var data = forfattere

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

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

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

foreach (var forfatter i data)

{

Console.WriteLine (forfatter);

}

Når du udfører ovenstående kodestykke, skal du se output i konsolvinduet som vist på skærmbilledet nedenfor.

Fremskrivninger kan bruges, når du arbejder med EF Core, så du kun kan hente kolonnerne fra den underliggende database, du har brug for til din applikation. I en fremtidig artikel her vil jeg diskutere nogle avancerede operationer ved hjælp af fremskrivninger såsom en-til-mange fremskrivninger, resultatfiltrering og ordre.