J'utilise Linq dynamique et les clauses where fonctionnent. Maintenant, je cherche à ajouter des clauses orderby mais j'ai un problème pour pouvoir définir le type de l'expression dynamique. Ci-dessous est le code de travail que j'ai:Linq dynamique - Définition du type d'expression orderby à l'exécution
class MyClass {
public string Owner;
public DateTime Inserted;
}
Expression<Func<MyClass, bool>> whereExpression = DynamicExpression.ParseLambda<MyClass, bool>("owner = \"joe\"");
Expression<Func<MyClass, DateTime>> orderExpression = DynamicExpression.ParseLambda<MyClass, DateTime>("inserted");
var result = from item in table.Where(whereExpression).OrderBy(orderExpression) select item;
result.ToList().ForEach(m => Console.WriteLine("inserted=" + m.Inserted + "."));
Parce que je dois utiliser des propriétés différentes dans l'expression orderby ce que je voudrais être en mesure de faire est d'utiliser quelque chose comme le code ci-dessous qui ne fonctionne pas.
Expression<Func<MyClass, bool>> whereExpression = DynamicExpression.ParseLambda<MyClass, bool>("owner = \"joe\"");
Type orderType = typeof(DateTime);
Expression<Func<MyClass, orderType>> orderExpression = DynamicExpression.ParseLambda<MyClass, orderType>("inserted");
var result = from item in table.Where(whereExpression).OrderBy(orderExpression) select item;
result.ToList().ForEach(m => Console.WriteLine("inserted=" + m.Inserted + "."));
Le compilateur n'est pas satisfait de la ligne supprimant orderExpression. Est-il possible de définir le type d'un Func lors de l'exécution?