Maison >développement back-end >C++ >Comment retourner les types anonymes de LINQ aux requêtes SQL?
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!