Créer un arbre d'expression pour le sélecteur

c# expression-trees lambda linq

Question

Relatif à :

Créer une expression lambda avec 3 conditions

Convert Contains To Tree Expression

Convertir List.Contains en arbre d'expression

Veuillez considérer les questions ci-dessus.

Je veux écrire une requête pour ceci:

using (MyEntities context = new MyEntities())
{
     var DbSet = context.CreateObjectSet<T>();
     var Max = DbSet.Where(exp).Select(selector).Max();
}

Je ne sais pas comment écrire un code pour selector . Quelle surcharge Select devrais-je utiliser? et comment puis-je écrire cela en utilisant Expression Tree?

Merci

Réponse acceptée

Quelle surcharge choisir devrais-je utiliser?

Celui avec un seul paramètre en plus de la source :

public static IQueryable<TResult> Select<TSource, TResult>(
    this IQueryable<TSource> source,
    Expression<Func<TSource, TResult>> selector
)

Comment puis-je écrire cela en utilisant Expression Tree?

Le sélecteur doit prendre un paramètre TSource et générer le champ pour lequel vous voulez extraire Max . Par exemple, supposons que TSource soit de type Employee et que vous souhaitiez trouver le Max de sa propriété Salary de type decimal . Ensuite, vous créeriez un arbre d'expression comme ceci:

var p = Expression.Parameter(typeof(Employee));
var m = Expression.Property(p, "Salary");
var e = Expression.Lambda(m, p);
var selector = (Expression<Func<Employee,decimal>>)e;



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi