2009-06-05 5 views
2

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?

Répondre

3

On dirait que les méthodes d'extension Linq dynamiques prennent soin de tout cela pour moi. Je le rendais trop dur.

var result = from item in table.Where("owner = \"joe\"").OrderBy("inserted") select item; 
result.ToList().ForEach(m => Console.WriteLine("inserted=" + m.Inserted + ".")); 
0

Oui - si un problème est que DynamicLinq ne vous laissera pas en utilisant une sorte IComparer. J'ai un solution à cela.

Questions connexes