2010-01-09 4 views
0

Considérons l'expression suivante:LINQ to SQL: valeur ajouter la transformation

from p in db.People 
    select new Person { 
     Name = p.Name, Age = p.Age, Gender = p.Gender.ToEnum<Gender>() 
}; 

Il fonctionne au point d'appeler la méthode d'extension static T ToEnum<T>(this string value); comme prévu.
Je comprends pourquoi il y a je ne sais pas comment traduire la chaîne en enum erreur.
Question est: comment puis-je contourner cela sans introduire un autre cours?
Je veux dire que je pourrais définir la classe PersonWithGenderAsText puis la traduire en classe Person, mais je pense qu'il devrait y avoir un moyen plus facile.
Plus précisément, je ne me dérange pas d'appeler .ToList() sur le résultat de l'expression ci-dessus, mais je ne peux pas comprendre le reste.

Répondre

3

utiliser juste un type interne anonyme pour aller chercher seulement les bits que vous voulez à partir de la base de données, utilisez AsEnumerable pour passer en mode « en cours », et alors vous pouvez faire la transformation en un objet Personne:

var query = db.People 
       .Select(p => new { p.Name, p.Age, p.Gender }) 
       .AsEnumerable() 
       .Select(p => new Person { Name = p.Name, 
             Age = p.Age, 
             Gender = p.Gender.ToEnum<Gender>() }); 

S'il n'y a plus de données db.People vous pouvez simplifier encore:

var query = db.People 
       .AsEnumerable() 
       .Select(p => new Person { Name = p.Name, 
             Age = p.Age, 
             Gender = p.Gender.ToEnum<Gender>() });