Verwendung von Projektionen in C #

Projektion ist eine Operation, die die Ergebnisse einer Abfrage transformiert. Mit der Projektion können Sie ein Objekt in ein neues Formular umwandeln, das nur die Eigenschaften enthält, die in Ihrer Anwendung benötigt werden. In diesem Artikel sehen wir uns an, wie wir mit Projektionen in C # arbeiten können.

Um mit den in diesem Artikel bereitgestellten Codebeispielen arbeiten zu können, muss Visual Studio 2019 auf Ihrem System installiert sein. Wenn Sie noch keine Kopie haben, können Sie Visual Studio 2019 hier herunterladen. 

Erstellen Sie ein Konsolenanwendungsprojekt in Visual Studio

Zunächst erstellen wir ein .NET Core-Konsolenanwendungsprojekt in Visual Studio. Angenommen, Visual Studio 2019 ist auf Ihrem System installiert, führen Sie die folgenden Schritte aus, um ein neues .NET Core Console-Anwendungsprojekt in Visual Studio zu erstellen.

  1. Starten Sie die Visual Studio-IDE.
  2. Klicken Sie auf "Neues Projekt erstellen".
  3. Wählen Sie im Fenster "Neues Projekt erstellen" aus der Liste der angezeigten Vorlagen "Konsolen-App (.NET Core)" aus.
  4. Weiter klicken.
  5. Geben Sie im nächsten Fenster "Konfigurieren Sie Ihr neues Projekt" den Namen und den Speicherort für das neue Projekt an.
  6. Klicken Sie auf Erstellen.
  7. Dadurch wird ein neues .NET Core-Konsolenanwendungsprojekt in Visual Studio 2019 erstellt. Dieses Projekt wird in den folgenden Abschnitten dieses Artikels verwendet.

Was ist Projektion in C #?

Projektion bezieht sich auf den Vorgang des Transformierens eines Objekts in eine neue Form, sodass das neu erstellte Objekt nur die Eigenschaften enthält, die verwendet werden. Language Integrated Query (LINQ) unterstützt zwei Standard-Abfrageprojektionsoperatoren, Select und SelectMany.

Mit den Operatoren Select und SelectMany können Sie eine einzelne Eigenschaft projizieren oder die Ergebnisse einer Abfrage projizieren oder mehrere Eigenschaften aus einer Datenquelle in einen anonymen Typ projizieren. Sie können bei Bedarf sogar Berechnungen, Filterungen oder andere Vorgänge für eine Projektion ausführen.

In den folgenden Abschnitten werden wir untersuchen, wie wir mit diesen Operatoren in C # arbeiten können.

Projizieren Sie mit dem Operator Auswählen in C #

Schreiben Sie den folgenden Code in die Datei Program.cs.

öffentliche Klasse Autor

{

    public int Id {get; einstellen; }}

    öffentliche Zeichenfolge Vorname {get; einstellen; }}

    öffentlicher String Nachname {get; einstellen; }}

    öffentliche Zeichenfolge Adresse {get; einstellen; }}

    öffentlicher Autor (int id, string firstName,

    Zeichenfolge Nachname, Zeichenfolge Adresse)

    {

        this.Id = id;

        this.FirstName = firstName;

        this.LastName = lastName;

        this.Address = address;

    }}

}}

Das folgende Codeausschnitt zeigt, wie Sie den Select-Operator zum Abfragen von Daten nutzen können.

var Autoren = neue Liste

{

   neuer Autor (1, "Joydip", "Kanjilal", "Hyderabad, INDIA"),

   neuer Autor (2, "Anand", "Naraswamy", "Cochin, INDIA"),

   neuer Autor (3, "Steve", "Smith", "Ohio, USA"),

   neuer Autor (4, "Uday", "Denduluri", "London, UK")

};

foreach (Variablenname in Autoren.Wählen Sie (e => e.FirstName))

{

   Console.WriteLine (Name);

}}

Wenn Sie das obige Code-Snippet ausführen, werden die Vornamen aller Autoren im Konsolenfenster angezeigt.

Projekt auf anonyme Typen in C #

Sie können mehr als eine Eigenschaft aus einer Datenquelle projizieren, Sie können sogar auf einen anonymen Typ projizieren. Das folgende Codeausschnitt zeigt, wie Sie mehrere Eigenschaften in einen anonymen Typ projizieren können.

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

Projektieren Sie mit dem SelectMany-Operator in C #

Sie können den SelectMany-Operator verwenden, um Daten aus einer Sammlung abzufragen, die die IEnumerable-Schnittstelle implementiert. Sie können den SelectMany-Operator verwenden, wenn Sie Daten aus mehreren Sammlungen abfragen und projizieren oder in einer einzigen Sequenz reduzieren möchten.

Beachten Sie, dass sowohl Select als auch SelectMany ein Ergebnis aus Quellwerten erzeugen. Während Select aus jedem Quellwert ein einzelnes Ergebnis erzeugt, erzeugt SelectMany aus jedem Quellwert eine verkettete Untersammlung.

Fügen wir jetzt eine zusätzliche Eigenschaft in die Author-Klasse mit dem Namen Subjects ein. Diese Eigenschaft ist eine Liste von Zeichenfolgen, die die Namen der Themen enthalten, über die der Autor Bücher schreibt.

öffentliche Klasse Autor

    {

        public int Id {get; einstellen; }}

        öffentliche Zeichenfolge Vorname {get; einstellen; }}

        öffentlicher String Nachname {get; einstellen; }}

        öffentliche Zeichenfolge Adresse {get; einstellen; }}

        öffentliche Liste Themen {get; einstellen; }}

        öffentlicher Autor (int id, Zeichenfolge Vorname, Zeichenfolge Nachname,

        Zeichenfolgenadresse, Themen auflisten)

        {

            this.Id = id;

            this.FirstName = firstName;

            this.LastName = lastName;

            this.Address = address;

            this.Subjects = subject;

        }}

    }}

Mit dem folgenden Codeausschnitt können Sie eine Liste der Autoren erstellen.

var Autoren = neue Liste

{

    neuer Autor (1, "Joydip", "Kanjilal", "Hyderabad, INDIA",

    neue Liste {"C #", "F #"}),

    neuer Autor (2, "Anand", "Naraswamy", "Cochin, INDIA", 

    neue Liste {"C #", "VB.NET"}),

    neuer Autor (3, "Steve", "Smith", "Ohio, USA", 

    neue Liste {"C #", "C ++"}),

    neuer Autor (4, "Uday", "Denduluri", "London, UK", 

    neue Liste {"C #", "VB.NET"}),

    neuer Autor (5, "Jane", "Barlow", "London, UK", 

    neue Liste {"C #", "C ++"})

 };

Mit dem folgenden Codeausschnitt können Sie die Namen der Programmiersprachen abrufen, über die die Autoren Bücher schreiben.

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

foreach (var Betreff in Daten)

{

    Console.WriteLine (Betreff);

}}

Verwenden Sie den Operator Where, um Ergebnisdaten in C # zu filtern

Sie können den Where-Operator nach SelectMany anwenden, um die Ergebnismenge zu filtern. Das folgende Codeausschnitt zeigt bei Ausführung den Vornamen und den Betreff des Autors an, dessen Vorname mit dem Zeichen "J" beginnt und in Großbritannien ansässig ist

var data = Autoren

.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 author in data)

{

    Console.WriteLine (Autor);

}}

Wenn Sie das obige Code-Snippet ausführen, sollte die Ausgabe im Konsolenfenster angezeigt werden (siehe Abbildung unten).

Bei der Arbeit mit EF Core können Projektionen verwendet werden, sodass Sie nur die Spalten aus der zugrunde liegenden Datenbank abrufen können, die Sie für Ihre Anwendung benötigen. In einem zukünftigen Artikel hier werde ich einige erweiterte Operationen mit Projektionen wie Eins-zu-Viele-Projektionen, Ergebnisfilterung und Reihenfolge diskutieren.