TOC

This article has been localized into German by the community.

LINQ:

Datentransformationen: die Select() Methode

Bisher haben wir in diesem LINQ-Kapitel des Tutorials mit einfachen Datenquellen gearbeitet, z.B.: eine Liste von ganzen Zahlen, Strings oder einfachen Objekten wie die User-Klasse. Wir werden dies auch weiterhin tun, weil es sehr praktisch ist, Ihnen Beispiele für die verschiedenen LINQ-Methoden zu zeigen, aber bedenken Sie, dass die Datenquelle mit LINQ auch ein komplexes XML-Dokument oder eine riesige Datenbank sein kann.

In diesem Artikel werden wir über die Select() -Methode sprechen, die es Ihnen ermöglicht, die Daten aus der Datenquelle zu nehmen und sie in etwas anderes zu verwandeln. Das ist vielleicht bei größeren und komplexeren Datenquellen, wie den oben genannten die ich Ihnen gezeigt habe, sinnvoller. Aber ich versuche Ihnen nur zu zeigen, wie die Select() -Methode funktioniert und was Sie damit machen können. Wie immer gehen wir direkt zu einem Beispiel:

using System;  
using System.Collections.Generic;  
using System.Linq;  

namespace LinqSelect1  
{  
    class Program  
    {  
static void Main(string[] args)  
{  
    List<User> listOfUsers = new List<User>()  
    {  
new User() { Name = "John Doe", Age = 42 },  
new User() { Name = "Jane Doe", Age = 34 },  
new User() { Name = "Joe Doe", Age = 8 },  
new User() { Name = "Another Doe", Age = 15 },  
    };  

    List<string> names = listOfUsers.Select(user => user.Name).ToList();  

    foreach (string name in names)  
Console.WriteLine(name);  
}  

class User  
{  
    public string Name { get; set; }  
    public int Age { get; set; }  
}  
    }  
}

Beachten Sie, wie ich eine Liste von Objekten aufnehmen kann, in diesem Fall vom Typ Benutzer, und dann die Select() -Methode verwende, um diese Liste zu einem neuen Listentyp um zu gestalten. In diesem Beispiel verwandle ich die Liste der Objekte in eine Liste von Strings, die die Namen der Benutzer enthalten. Dies ist äußerst praktisch in vielen Situationen, in denen Ihre Daten anders aussehen müssen oder nur eine Teilmenge davon benötigt wird. Natürlich funktioniert es auch andersherum - Sie können einfach eine Liste von Benutzerobjekten aus einer Liste von Namen erstellen (Sie müssen ihr Alter jedoch später manuell hinzufügen):

List<User> listOfUsers = new List<User>()
{
    new User() { Name = "John Doe", Age = 42 },
    new User() { Name = "Jane Doe", Age = 34 },
    new User() { Name = "Joe Doe", Age = 8 },
    new User() { Name = "Another Doe", Age = 15 },
};

List<string> names = listOfUsers.Select(user => user.Name).ToList();

List<User> users = names.Select(name => new User { Name = name }).ToList();

foreach (User user in users)
    Console.WriteLine(user.Name);

Beachten Sie, wie ich neue Objekte mit der Select() -Methode erstellen kann - es ist eine extrem mächtige Funktion, mit der Sie so ziemlich alles mit Ihren Daten machen können. Eine übliche Verwendung für diese Funktionalität besteht darin, weniger komplexe Versionen eines Objekts, z.B.: über einen Webdienst als JSON oder XML zurückzugeben. Stellen Sie sich vor, Sie haben eine Benutzerklasse mit vielen Eigenschaften (Geburtstag, Geschlecht, E-Mail, Adresse, Land usw.), aber Sie möchten nur eine begrenzte Menge dieser Eigenschaften zurückgeben, die auch sicherheitsrelevant sein könnten stellen Sie sicher, dass Sie keine allgemeinen Benutzereigenschaften wie Benutzername und Passwort zurückgeben. Hier ist ein vereinfachtes Beispiel - stellen Sie sich eine viel komplexere Benutzerklasse vor:

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqSelect2
{
    class Program
    {
static void Main(string[] args)
{
    List<User> listOfUsers = new List<User>()
    {
new User() { Name = "John Doe", Mail = "john@doe.com", Age = 42 },
new User() { Name = "Jane Doe", Mail = "jane@doe.com", Age = 34 },
new User() { Name = "Joe Doe", Mail = "joe@doe.com", Age = 8 },
new User() { Name = "Another Doe", Mail = "another@doe.com", Age = 15 },
    };

    var simpleUsers = listOfUsers.Select(user => new
    {
Name = user.Name,
Age = user.Age
    });
    foreach (var user in simpleUsers)
Console.WriteLine(user.Name);
}

class User
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Mail { get; set; }
}
    }
}

In diesem Beispiel verwenden wir die Select() -Methode, um eine Liste anonymer Typen zurückzugeben, die nur eine Teilmenge der in der Datenquelle gefundenen Eigenschaften enthält. Wir machen dann die klassische Ausgabe dieser Objekte an die Konsole, aber Sie sollten sich vorstellen, dass wir sie auf eine Website oder woanders zurückgeben, wo es wichtig ist, das Ergebnis so einfach wie möglich zu halten, ohne irgendwelche Geheimnisse wie Passwörter etc. preiszugeben.

Wie wir bereits besprochen haben, werde ich in diesen Beispielen hauptsächlich die Methodensyntax von LINQ verwenden, aber natürlich können die Operationen, die wir in diesem Beispiel durchführen, auch mit der LINQ-Abfragesyntax ausgedrückt werden:

// Method syntax
var simpleUsers = listOfUsers.Select(user => new
{
    Name = user.Name,
    Age = user.Age
});

// Query syntax
var simpleUsersQ = (from user in listOfUsers
    select new
    {
Name = user.Name,
Age = user.Age
    }).ToList();

foreach (var user in simpleUsersQ)
    Console.WriteLine(user.Name);

Ich hoffe, das gibt Ihnen eine bessere Vorstellung davon, welche Syntax Sie bevorzugen, aber das Ergebnis ist natürlich das Gleiche!

Zusammenfassung

Mit der Select() -Methode können Sie Daten aus Ihrer Datenquelle in neue Varianten transformieren und formen, indem Sie beispielsweise nur eine einzelne Eigenschaft auswählen oder Objekte zurückgeben, die nur eine Teilmenge der Eigenschaften enthalten, die im Quellobjekt gefunden wurden.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!