Maison >développement back-end >C++ >Comment retourner les types anonymes de LINQ aux requêtes SQL?

Comment retourner les types anonymes de LINQ aux requêtes SQL?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-28 00:16:09841parcourir

How to Return Anonymous Types from LINQ to SQL Queries?

Méthode pour renvoyer un type anonyme dans une requête LINQ to SQL

Le retour de types anonymes peut présenter des défis lorsque vous travaillez avec plusieurs tables à l'aide de LINQ to SQL. Prenons l'exemple suivant :

Méthode originale :

<code class="language-csharp">public IQueryable<dog> GetDogs()
{
    var db = new DogDataContext(ConnectString);
    var result = from d in db.Dogs
                 join b in db.Breeds on d.BreedId equals b.BreedId
                 select d;
    return result;
}</code>

Cette méthode récupère avec succès toutes les informations sur le chien. Cependant, si on essaie de récupérer le chien et son nom de race en utilisant un type anonyme :

<code class="language-csharp">public IQueryable<dog> GetDogsWithBreedNames()
{
    var db = new DogDataContext(ConnectString);
    var result = from d in db.Dogs
                 join b in db.Breeds on d.BreedId equals b.BreedId
                 select new
                        {
                            Name = d.Name,
                            BreedName = b.BreedName
                        };
    return result;
}</code>

Nous obtenons une erreur car le compilateur s'attend à ce qu'un type Dog soit renvoyé, pas un type anonyme.

Alternative : Classe personnalisée

Une solution consiste à créer une classe personnalisée comme DogWithBreed :

<code class="language-csharp">public class DogWithBreed
{
    public Dog Dog { get; set; }
    public string BreedName { get; set; }
}</code>

Ensuite vous pouvez modifier le code comme suit :

<code class="language-csharp">public IQueryable<DogWithBreed> GetDogsWithBreedNames()
{
    var db = new DogDataContext(ConnectString);
    var result = from d in db.Dogs
                 join b in db.Breeds on d.BreedId equals b.BreedId
                 select new DogWithBreed()
                        {
                            Dog = d,
                            BreedName = b.BreedName
                        };
    return result;
}</code>

Cette approche fournit une solution de type sécurisé et réutilisable, même si elle nécessite un effort de codage supplémentaire. Le choix d'une classe personnalisée peut éviter les problèmes d'incompatibilité de types causés par les types anonymes et améliorer la maintenabilité et la lisibilité du code.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn