Linq to SQL : gestion des requêtes complexes et des types anonymes
LINQ to SQL est un outil puissant pour l'interaction avec les bases de données, mais des limites existent lorsqu'il s'agit de jeux de résultats complexes, en particulier ceux impliquant des types anonymes. Cela devient souvent évident lors de l'interrogation de plusieurs tables.
Considérez deux tableaux : "Chiens" (avec les colonnes "Nom", "Âge", "BreedId") et "Breeds" ("BreedId", "BreedName"). L'objectif est de récupérer des informations sur les chiens ainsi que leurs noms de race. Une approche naïve utilisant une jointure et une projection de type anonyme pourrait ressembler à ceci :
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 };
Cela échoue car LINQ to SQL nécessite un type mappable, ce qui n'est pas le cas des types anonymes.
La solution : les cours personnalisés
La solution recommandée consiste à définir une classe personnalisée pour représenter les données combinées :
public class DogWithBreed { public Dog Dog { get; set; } public string BreedName { get; set; } }
La requête est ensuite modifiée pour renseigner les instances de cette classe :
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 };
Cette approche offre sécurité et extensibilité des types, permettant une gestion efficace des données complexes récupérées à partir de plusieurs tables, éliminant les limitations imposées par les types anonymes dans les requêtes LINQ to SQL.
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!