Programmering

Hvordan bruke projeksjoner i C #

Projeksjon er en operasjon som transformerer resultatene av et spørsmål. Du kan bruke projeksjon til å transformere et objekt til et nytt skjema som bare har de egenskapene som trengs i applikasjonen din. I denne artikkelen ser vi på hvordan vi kan jobbe med anslag i C #.

For å jobbe med kodeeksemplene som er gitt i denne artikkelen, bør du ha Visual Studio 2019 installert på systemet ditt. Hvis du ikke allerede har en kopi, kan du laste ned Visual Studio 2019 her.

Opprett et konsollapplikasjonsprosjekt i Visual Studio

La oss først lage et .NET Core-konsollapplikasjonsprosjekt i Visual Studio. Forutsatt at Visual Studio 2019 er installert i systemet ditt, følger du trinnene som er beskrevet nedenfor for å opprette et nytt .NET Core Console Application-prosjekt i Visual Studio.

  1. Start Visual Studio IDE.
  2. Klikk på "Opprett nytt prosjekt."
  3. I vinduet "Opprett nytt prosjekt" velger du "Konsollapp (.NET Core)" fra listen over maler som vises.
  4. Klikk på Neste.
  5. I vinduet “Konfigurer ditt nye prosjekt” som vises, angir du navnet og stedet for det nye prosjektet.
  6. Klikk på Opprett.
  7. Dette oppretter et nytt .NET Core-konsollapplikasjonsprosjekt i Visual Studio 2019. Vi bruker dette prosjektet i de påfølgende delene av denne artikkelen.

Hva er projeksjon i C #?

Projeksjon refererer til handlingen med å transformere et objekt til en ny form slik at det nyopprettede objektet bare inneholder egenskapene som skal brukes. Language Integrated Query (LINQ) gir støtte til to standardprojeksjonsprojeksjonsoperatører, Select og SelectMany.

Du kan bruke Select og SelectMany-operatorene til å projisere en enkelt eiendom, eller projisere resultatene av et spørsmål, eller projisere flere egenskaper fra en datakilde til en anonym type. Du kan til og med utføre beregninger, filtrering eller andre operasjoner på en projeksjon etter behov.

I avsnittene som følger vil vi undersøke hvordan vi kan samarbeide med disse operatørene i C #.

Prosjekt ved hjelp av Select-operatøren i C #

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

offentlig klasse Forfatter

{

offentlig int Id {get; sett; }

offentlig streng Fornavn {get; sett; }

offentlig streng Etternavn {get; sett; }

public string Address {get; sett; }

offentlig forfatter (int id, streng fornavn,

streng etternavn, streng adresse)

    {

this.Id = id;

this.FirstName = fornavn;

this.LastName = etternavn;

this.Address = adresse;

    }

}

Følgende kodebit illustrerer hvordan du kan dra nytte av Select-operatøren for å spørre om data.

var forfattere = ny liste

{

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

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

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

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

};

foreach (var navn i forfattere. Velg (e => e.FirstName))

{

Console.WriteLine (navn);

}

Når du utfører kodebiten ovenfor, vil fornavnene til alle forfatterne vises i konsollvinduet.

Prosjekter til anonyme typer i C #

Du kan projisere mer enn én eiendom fra en datakilde, du kan til og med projisere til en anonym type også. Følgende kodebit illustrerer hvordan du kan projisere flere egenskaper til en anonym type.

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

Prosjekt ved hjelp av SelectMany-operatøren i C #

Du kan dra nytte av SelectMany-operatøren til å spørre om data fra en samling som implementerer det IEnumerable grensesnittet. Du kan bruke SelectMany-operatøren når du vil spørre data fra flere samlinger og projisere eller flate dem i en enkelt sekvens.

Merk at både Select og SelectMany produserer et resultat fra kildeverdiene. Mens Select produserer et enkelt resultat fra hver kildeverdi, produserer SelectMany en sammenkoblet undersamling fra hver kildeverdi.

La oss nå ta med en ekstra eiendom i forfatterklassen som heter Emner. Denne egenskapen er en liste over strenger som inneholder navnene på emnene forfatteren skriver bøker om.

offentlig klasse Forfatter

    {

offentlig int Id {get; sett; }

offentlig streng Fornavn {get; sett; }

offentlig streng Etternavn {get; sett; }

public string Address {get; sett; }

offentlige listeemner {get; sett; }

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

strengadresse, listeemner)

        {

this.Id = id;

this.FirstName = fornavn;

this.LastName = etternavn;

this.Address = adresse;

dette.Fag = emner;

        }

    }

Du kan bruke følgende kodebit for å lage en liste over forfattere.

var forfattere = ny liste

{

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

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

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

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 bruke kodebiten nedenfor for å hente navnene på programmeringsspråkene forfatterne skriver bøker om.

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

foreach (var emne i data)

{

Console.WriteLine (emne);

}

Bruk Where-operatoren til å filtrere resultatdata i C #

Du kan bruke Where-operatøren etter SelectMany for å filtrere resultatsettet. Følgende kodebit når det kjøres viser fornavnet og emnet til forfatteren hvis fornavn starter med tegnet "J" og ligger i Storbritannia.

var data = forfattere

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

.SelectMany (a => a. Emner, (a, Subject) => nye {a.FirstName, Subject})

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

foreach (var forfatter i data)

{

Console.WriteLine (forfatter);

}

Når du utfører kodebiten ovenfor, bør du se utdataene i konsollvinduet som vist på skjermbildet nedenfor.

Projeksjoner kan brukes når du arbeider med EF Core, slik at du bare kan hente kolonnene fra den underliggende databasen du trenger for applikasjonen din. I en fremtidig artikkel her vil jeg diskutere noen avanserte operasjoner ved å bruke anslag som en-til-mange-anslag, resultatfiltrering og bestilling.