Créer une expression OrderBy pour LINQ / Lambda
Je suis de la création d'une preuve de concept qui utilise Lambda/LINQ dynamique où et orderby. Le code suivant fonctionne pour le où l'expression, mais je n'arrive pas à comprendre comment créer un bon de commande par l'expression. Pour cet exemple, si possible, je voudrais le garder simple; je préfère ne pas écrire du code qui modifie l'Expression de l'Arbre.
void Main()
{
DateTime productSince = DateTime.UtcNow.Subtract(new TimeSpan(1,30,0));
Expression<Func<Products, bool>> filter = d => d.CreatedDate > productSince && d.Price < 100 ;
List<Products> products = GetProducts(filter, Products);
Console.WriteLine(products);
}
private static List<Products> GetProducts(Expression<Func<Products, bool>> filter, Table<Products> Products)
{
var products = Products.Where(filter);
return products.ToList();
}
Ce que je veux, c'est semblable à la suivante, mais ne peut pas trouver le code pour créer la commande par l'expression.
void Main()
{
DateTime productSince = DateTime.UtcNow.Subtract(new TimeSpan(1,30,0));
Expression<Func<Products, bool>> filter = d => d.CreatedDate > productSince && d.Price < 100 ;
Expression<Func<Products, ????>> orderBy = d => ??????;
List<Products> products = GetProducts(filter, orderBy, Products);
Console.WriteLine(products);
}
private static List<Products> GetProducts(Expression<Func<Products, bool>> filter,
Expression<Func<Products, ???>> orderBy, Table<Products> Products)
{
var products = Products.Where(filter).OrderBy(orderBy);
return products.ToList();
}
Si vous vous demandez, je suis en utilisant LinqPad pour cette preuve de concept.
source d'informationauteur Mike Barlow - BarDev
Vous devez vous connecter pour publier un commentaire.
Si vous regardez OrderBy extension de la méthode qu'il accepte un
Expression<Func<T, TOrderBy>>
parce que l'expression peut causer tout type selonDonc à cet effet de votre méthode wrapper doit être en mesure d'accepter que le type générique pour passer en.
ce que vous cherchez est:
essayez de créer une structure/classe afin de conserver à la fois l'Expression et s'il est croissant ou décroissant.