Hur man använder projektioner i C #

Projektion är en operation som omvandlar resultaten från en fråga. Du kan använda projektion för att förvandla ett objekt till en ny form som bara har de egenskaper som behövs i din applikation. I den här artikeln tittar vi på hur vi kan arbeta med prognoser i C #.

För att arbeta med kodexemplen i den här artikeln bör du ha Visual Studio 2019 installerat i ditt system. Om du inte redan har en kopia kan du ladda ner Visual Studio 2019 här. 

Skapa ett konsolapplikationsprojekt i Visual Studio

Först och främst, låt oss skapa ett .NET Core-konsolapplikationsprojekt i Visual Studio. Förutsatt att Visual Studio 2019 är installerat i ditt system, följ stegen nedan för att skapa ett nytt .NET Core Console Application-projekt i Visual Studio.

  1. Starta Visual Studio IDE.
  2. Klicka på "Skapa nytt projekt."
  3. I fönstret "Skapa nytt projekt" väljer du "Konsolapp (.NET Core)" från listan över mallar som visas.
  4. Klicka på Nästa.
  5. I fönstret "Konfigurera ditt nya projekt" som visas nedan anger du namn och plats för det nya projektet.
  6. Klicka på Skapa.
  7. Detta skapar ett nytt .NET Core-konsolapplikationsprojekt i Visual Studio 2019. Vi använder detta projekt i de följande avsnitten i den här artikeln.

Vad är projektion i C #?

Projektion avser handlingen att omvandla ett objekt till en ny form så att det nyskapade objektet endast innehåller de egenskaper som kommer att användas. Language Integrated Query (LINQ) tillhandahåller stöd för två standardfrågeprojektionsoperatörer, Select och SelectMany.

Du kan använda Select- och SelectMany-operatörerna för att projicera en enskild egendom eller projicera resultaten av en fråga eller projicera flera egenskaper från en datakälla till en anonym typ. Du kan till och med utföra beräkningar, filtrering eller andra operationer på en projektion efter behov.

I följande avsnitt kommer vi att undersöka hur vi kan arbeta med dessa operatörer i C #.

Projicera med Select-operatören i C #

Skriv följande kod inuti Program.cs-filen.

public class Författare

{

    public int Id {get; uppsättning; }

    public string Förnamn {get; uppsättning; }

    public string LastName {get; uppsättning; }

    public string Adress {get; uppsättning; }

    public Author (int id, string firstName,

    sträng efternamn, strängadress)

    {

        this.Id = id;

        this.FirstName = förnamn;

        this.LastName = efternamn;

        this.Address = adress;

    }

}

Följande kodavsnitt illustrerar hur du kan utnyttja Select-operatören för att fråga data.

var författare = ny lista

{

   ny författare (1, "Joydip", "Kanjilal", "Hyderabad, INDIEN"),

   ny författare (2, "Anand", "Naraswamy", "Cochin, INDIEN"),

   ny författare (3, "Steve", "Smith", "Ohio, USA"),

   ny författare (4, "Uday", "Denduluri", "London, Storbritannien")

};

foreach (var namn i författare. Välj (e => e.FirstName))

{

   Console.WriteLine (namn);

}

När du kör kodavsnittet ovan visas förnamnen på alla författarna i konsolfönstret.

Projicera till anonyma typer i C #

Du kan projicera mer än en egendom från en datakälla, du kan även projicera till en anonym typ också. Följande kodavsnitt illustrerar hur du kan projicera flera egenskaper till en anonym typ.

var data = författare. Välj (e => ny {e.FirstName, e.LastName});

Projekt med SelectMany-operatören i C #

Du kan dra nytta av SelectMany-operatören för att fråga data från en samling som implementerar det IEnumrerbara gränssnittet. Du kan använda SelectMany-operatören när du vill fråga data från flera samlingar och projicera eller platta dem i en enda sekvens.

Observera att både Select och SelectMany ger ett resultat från källvärden. Medan Select producerar ett enda resultat från varje källvärde, producerar SelectMany en sammanhängande undersamling från varje källvärde.

Låt oss nu inkludera en extra egenskap i författarklassen med namnet Ämnen. Den här egenskapen är en lista med strängar som innehåller namnen på de ämnen som författaren skriver böcker om.

public class Författare

    {

        public int Id {get; uppsättning; }

        public string Förnamn {get; uppsättning; }

        public string LastName {get; uppsättning; }

        public string Adress {get; uppsättning; }

        offentliga listämnen {get; uppsättning; }

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

        strängadress, Listämnen)

        {

            this.Id = id;

            this.FirstName = förnamn;

            this.LastName = efternamn;

            this.Address = adress;

            detta. Ämnen = ämnen;

        }

    }

Du kan använda följande kodavsnitt för att skapa en lista över författare.

var författare = ny lista

{

    ny författare (1, "Joydip", "Kanjilal", "Hyderabad, INDIA",

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

    ny författare (2, "Anand", "Naraswamy", "Cochin, INDIA", 

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

    ny författare (3, "Steve", "Smith", "Ohio, USA", 

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

    ny författare (4, "Uday", "Denduluri", "London, UK", 

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

    ny författare (5, "Jane", "Barlow", "London, UK", 

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

 };

Och du kan använda kodavsnittet nedan för att hämta namnen på de programmeringsspråk som författarna skriver böcker om.

var data = författare.SelectMany (a => a.Subjects) .Distinct ();

foreach (var ämne i data)

{

    Console.WriteLine (ämne);

}

Använd Where-operatören för att filtrera resultatdata i C #

Du kan använda Var-operatören efter SelectMany för att filtrera resultatuppsättningen. Följande kodavsnitt när det körs visar förnamnet och ämnet för författaren vars förnamn börjar med tecknet "J" och finns i Storbritannien

var data = författare

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

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

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

foreach (var författare i data)

{

    Console.WriteLine (författare);

}

När du kör ovanstående kodavsnitt bör du se utdata i konsolfönstret som visas på skärmbilden nedan.

Projektioner kan användas när du arbetar med EF Core, så att du bara kan hämta kolumnerna från den underliggande databasen du behöver för din applikation. I en framtida artikel här kommer jag att diskutera några avancerade operationer med hjälp av prognoser som en-till-många-prognoser, resultatfiltrering och beställning.