Je voudrais changer le code suivant pour gérer le regroupement de plus de 1 biensLinq: Groupe par plusieurs colonnes en utilisant la syntaxe Expression arbre
private Expression<Func<ProfileResultView, string>> DynamicGroupBy(string propertyName)
{
var parameterExp = Expression.Parameter(typeof(ProfileResultView), "x");
var memberExp = Expression.PropertyOrField(parameterExp, propertyName);
return Expression.Lambda<Func<ProfileResultView, string>>(memberExp, parameterExp);
}
donc alors ce serait traduit à
GroupBy(x => new { x.Column1, x.Column2 })
comment puis-je écrire le type anonyme dans la syntaxe expression-arbre?
Un type anonyme est généré par le compilateur et placé dans l'ensemble de sortie. Ils ne peuvent pas être générés dynamiquement au moment de l'exécution de la même manière. Maintenant, vous pouvez générer un tel type dynamiquement, mais je suis à peu près sûr qu'il ne fonctionnera pas correctement dans une expression LINQ que vous essayez de l'utiliser maintenant. –
Avec quel fournisseur LINQ allez-vous utiliser ceci? LINQ aux objets? LINQ aux entités? Autre chose? – svick
Qu'en est-il du type de retour de votre méthode? maintenant vous avez une expression retournant une chaîne, dans votre scénario souhaité, il retournerait un type anonyme? Ce n'est pas possible. À tout le moins, vous devrez modifier votre méthode pour modifier la requête au lieu de renvoyer l'expression de regroupement. Ensuite, vous pouvez générer les types à la volée avec IL, mais c'est un peu moche, pas si rapide, et vous devez gérer la mise en cache, et le nettoyage et beaucoup de bits sales :( – MBoros