Retour au type anonyme Résultat de LINQ à SQL
Lorsque vous utilisez LINQ à SQL pour interroger plusieurs tables, le rendement des résultats de type anonyme peut susciter des défis. Compte tenu d'une scène, vous avez une table de chiens (y compris le nom, l'âge et la racedid) et les tables de reproduction (y compris le nom de BreedId et le nom de race). Il est simple de récupérer tous les chiens:
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;
}
Copier après la connexion
Cependant, essayer d'utiliser un type anonyme pour retourner un chien avec le nom de race correspondant provoquera des erreurs de compilation:
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;
}
Copier après la connexion
En effet, Linq to SQL prévoit de renvoyer le type de chien, mais la requête génère un type anonyme.
Utilisez la classe personnalisée
Afin de surmonter ce problème, une solution consiste à créer une classe personnalisée pour représenter le résultat requis:
public class DogWithBreed
{
public Dog Dog { get; set; }
public string BreedName { get; set; }
}
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;
}
Copier après la connexion
Cette méthode crée une classe de chien avec des propriétés du chien et du nom de race. Ensuite, interrogez l'exemple de cette classe personnalisée, qui peut être utilisée pour accéder aux données requises.
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!