Je ne crois pas que vous serez en mesure d'atteindre cet objectif. Bien que quand vous ne select new { c.Name, c.Population }
il semble que vous n'êtes pas la création d'une classe vous êtes réellement. Si vous avez un coup d'oeil à la sortie compilée dans le Réflecteur ou cru, IL vous serez en mesure de voir ça.
Vous aurez une classe qui ressemblerait à quelque chose comme ceci:
[CompilerGenerated]
private class <>c__Class {
public string Name { get; set; }
public int Population { get; set; }
}
(Ok, j'ai nettoyé une touche, depuis un bien est vraiment juste un get_Name()
et set_Name(name)
méthode de jeu de toute façon)
Ce que vous essayez de faire est la bonne dynamique de la création de classes, quelque chose qui ne sera pas disponible jusqu'à ce que .NET 4.0 vient de sortir (et même alors, je ne suis pas vraiment sûr si ça va être en mesure de réaliser ce que vous voulez).
Vous êtes à la meilleure solution serait de définir les différents anonyme classes et ensuite avoir une sorte de logique de contrôle afin de déterminer celui qui à créer, et à le créer, vous pouvez utiliser l'objet System.Linq.Expressions.NewExpression
.
Mais, il se peut (en théorie au moins) possible de le faire, si vous vous sentez vraiment hard-core sur le sous-jacent LINQ fournisseur. Si vous êtes de la rédaction de votre propre fournisseur LINQ vous pouvez détecter si actuellement analysé l'expression est de Sélectionner, ensuite, vous déterminez l' CompilerGenerated
classe, réfléchir pour son constructeur et de créer.
Défi n'est pas une tâche simple, mais il serait comment LINQ to SQL, LINQ to XML, etc tous le faire.