LINQ to SQL peut-il renvoyer des types anonymes comme résultats ?
Dans LINQ to SQL, comment interroger plusieurs tables et combiner les résultats avec des types anonymes ?
Tentative initiale utilisant des types anonymes
L'exemple suivant, utilisant deux tables Dogs
et Breeds
, tente de récupérer tous les chiens et leurs BreedName
correspondants 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; }</dog></code>
Cependant, cela échoue car le compilateur s'attend à ce que Dogs
soit renvoyé, et non un type anonyme.
Type personnalisé
Une solution consiste à créer un type personnalisé pour représenter le chien avec le nom de la race :
<code class="language-csharp">public class DogWithBreed { public Dog Dog { get; set; } public string BreedName { get; set; } }</code>
Utiliser le type personnalisé
Grâce à ce type personnalisé, les requêtes peuvent être modifiées pour renvoyer les résultats souhaités :
<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; }</dogwithbreed></code>
Cette approche fournit un moyen sûr et réutilisable de combiner les résultats de plusieurs tables à l'aide de types personnalisés. Cela évite les problèmes d’incompatibilité de types rencontrés lors de l’utilisation de types anonymes.
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!