Comment utiliser des projections en C #

La projection est une opération qui transforme les résultats d'une requête. Vous pouvez utiliser la projection pour transformer un objet en un nouveau formulaire qui ne possède que les propriétés requises dans votre application. Dans cet article, nous verrons comment nous pouvons travailler avec des projections en C #.

Pour utiliser les exemples de code fournis dans cet article, vous devez disposer de Visual Studio 2019 installé sur votre système. Si vous n'en avez pas déjà une copie, vous pouvez télécharger Visual Studio 2019 ici. 

Créer un projet d'application console dans Visual Studio

Tout d'abord, créons un projet d'application console .NET Core dans Visual Studio. En supposant que Visual Studio 2019 est installé sur votre système, suivez les étapes décrites ci-dessous pour créer un nouveau projet d'application console .NET Core dans Visual Studio.

  1. Lancez l'IDE de Visual Studio.
  2. Cliquez sur "Créer un nouveau projet".
  3. Dans la fenêtre «Créer un nouveau projet», sélectionnez «Application console (.NET Core)» dans la liste des modèles affichés.
  4. Cliquez sur Suivant.
  5. Dans la fenêtre «Configurer votre nouveau projet» ci-dessous, spécifiez le nom et l'emplacement du nouveau projet.
  6. Cliquez sur Créer.
  7. Cela créera un nouveau projet d'application console .NET Core dans Visual Studio 2019. Nous utiliserons ce projet dans les sections suivantes de cet article.

Qu'est-ce que la projection en C #?

La projection fait référence à l'acte de transformer un objet en une nouvelle forme de telle sorte que l'objet nouvellement créé ne contienne que les propriétés qui seront utilisées. Language Integrated Query (LINQ) prend en charge deux opérateurs de projection de requête standard, Select et SelectMany.

Vous pouvez utiliser les opérateurs Select et SelectMany pour projeter une seule propriété, ou projeter les résultats d'une requête ou projeter plusieurs propriétés d'une source de données dans un type anonyme. Vous pouvez même effectuer des calculs, un filtrage ou toute autre opération sur une projection selon vos besoins.

Dans les sections qui suivent, nous examinerons comment nous pouvons travailler avec ces opérateurs en C #.

Projet à l'aide de l'opérateur Select en C #

Écrivez le code suivant dans le fichier Program.cs.

public class Auteur

{

    public int Id {get; ensemble; }

    chaîne publique FirstName {get; ensemble; }

    chaîne publique LastName {get; ensemble; }

    chaîne publique Address {get; ensemble; }

    public Author (int id, string firstName,

    string lastName, string address)

    {

        this.Id = id;

        this.FirstName = firstName;

        this.LastName = nom de famille;

        this.Address = adresse;

    }

}

L'extrait de code suivant illustre comment vous pouvez tirer parti de l'opérateur Select pour interroger des données.

var auteurs = nouvelle liste

{

   nouvel auteur (1, "Joydip", "Kanjilal", "Hyderabad, INDE"),

   nouvel auteur (2, "Anand", "Naraswamy", "Cochin, INDE"),

   nouvel auteur (3, "Steve", "Smith", "Ohio, USA"),

   nouvel auteur (4, "Uday", "Denduluri", "London, UK")

};

foreach (var nom dans les auteurs.Select (e => e.FirstName))

{

   Console.WriteLine (nom);

}

Lorsque vous exécutez l'extrait de code ci-dessus, les prénoms de tous les auteurs seront affichés dans la fenêtre de la console.

Projet vers des types anonymes en C #

Vous pouvez projeter plus d'une propriété à partir d'une source de données, vous pouvez même projeter vers un type anonyme. L'extrait de code suivant illustre comment vous pouvez projeter plusieurs propriétés dans un type anonyme.

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

Projet utilisant l'opérateur SelectMany en C #

Vous pouvez tirer parti de l'opérateur SelectMany pour interroger des données à partir d'une collection qui implémente l'interface IEnumerable. Vous pouvez utiliser l'opérateur SelectMany lorsque vous souhaitez interroger des données de plusieurs collections et les projeter ou les aplatir en une seule séquence.

Notez que Select et SelectMany produisent un résultat à partir des valeurs source. Alors que Select produit un seul résultat à partir de chaque valeur source, SelectMany produit une sous-collection concaténée à partir de chaque valeur source.

Incluons maintenant une propriété supplémentaire dans la classe Author nommée Subjects. Cette propriété est une liste de chaînes contenant les noms des sujets sur lesquels l'auteur écrit des livres.

public class Auteur

    {

        public int Id {get; ensemble; }

        chaîne publique FirstName {get; ensemble; }

        chaîne publique LastName {get; ensemble; }

        chaîne publique Address {get; ensemble; }

        Public List Subjects {get; ensemble; }

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

        adresse de chaîne, liste des sujets)

        {

            this.Id = id;

            this.FirstName = firstName;

            this.LastName = nom de famille;

            this.Address = adresse;

            this.Subjects = sujets;

        }

    }

Vous pouvez utiliser l'extrait de code suivant pour créer une liste d'auteurs.

var auteurs = nouvelle liste

{

    nouvel auteur (1, "Joydip", "Kanjilal", "Hyderabad, INDE",

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

    nouvel auteur (2, "Anand", "Naraswamy", "Cochin, INDIA", 

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

    nouvel auteur (3, "Steve", "Smith", "Ohio, USA", 

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

    nouvel auteur (4, "Uday", "Denduluri", "London, UK", 

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

    nouvel auteur (5, "Jane", "Barlow", "London, UK", 

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

 };

Et vous pouvez utiliser l'extrait de code ci-dessous pour récupérer les noms des langages de programmation sur lesquels les auteurs écrivent des livres.

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

foreach (sujet var dans les données)

{

    Console.WriteLine (sujet);

}

Utilisez l'opérateur Where pour filtrer les données de résultat en C #

Vous pouvez appliquer l'opérateur Where après SelectMany pour filtrer l'ensemble de résultats. L'extrait de code suivant, une fois exécuté, affiche le prénom et le sujet de l'auteur dont le prénom commence par le caractère «J» et réside au Royaume-Uni.

var data = auteurs

.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 auteur dans les données)

{

    Console.WriteLine (auteur);

}

Lorsque vous exécutez l'extrait de code ci-dessus, vous devriez voir la sortie dans la fenêtre de la console, comme indiqué dans l'image d'écran ci-dessous.

Les projections peuvent être utilisées lorsque vous travaillez avec EF Core, vous ne pouvez donc récupérer que les colonnes de la base de données sous-jacente dont vous avez besoin pour votre application. Dans un prochain article ici, je discuterai de certaines opérations avancées utilisant des projections telles que les projections un-à-plusieurs, le filtrage des résultats et le classement.