J'ai une forme dans laquelle l'utilisateur choisira les éléments suivants de listes déroulantes:requête dynamique en utilisant l'arbre d'expression
table_name
columnName_to_sort_by
columnName_to_search_in
L'utilisateur entre Search_text
dans une zone de texte
Le formulaire établit les données de beaucoup de tables. Je veux éviter d'écrire le tri et rechercher tous les champs pour chacune des tables. C'est pourquoi je veux utiliser des arbres d'expression. Je veux construire la requête dynamiquement.
Je veux écrire une méthode générique qui va générer l'arbre d'expression pour les select
, where
et orderby
méthodes, en fonction de l'entrée utilisateur. Je peux utiliser System.Reflection
pour obtenir le Type
qui est interrogé (toutes mes tables sont des types - j'utilise LinqToSql).
Je ne sais pas comment former les arbres d'expression.
Voici ce que j'ai jusqu'à présent:
private static List<T> GetSortedData<T>(string sortColumnName)
{
var type = typeof(T);
var property = type.GetProperty(sortColumnName);
var parameter = Expression.Parameter(type, "p");
var propertyAccess = Expression.MakeMemberAccess(parameter, property);
var orderByExp = Expression.Lambda(propertyAccess, parameter);
MethodCallExpression resultExp = Expression.Call(typeof(Queryable), "OrderBy", new Type[] { type, property.PropertyType }, WHAT_SHOULD_BE_HERE, Expression.Quote(orderByExp));
return (List<T>)Expression.Lambda(resultExp).Compile().DynamicInvoke();
}
Comment puis-je mettre en œuvre select
, sort
et orderby
dynamiquement en utilisant des arbres d'expression?
possible d'avoir plusieurs colonnes Trier par – user145610