2009-06-05 15 views
2

私は動的なLinqを使用しており、where句が機能しています。今はorderby節を追加しようとしていますが、動的式の型を設定できないという問題があります。以下は、私が持っているコードを働いている: Dynamic Linq - 実行時にorderby式の型を設定します。

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 + ".")); 

私は私が行うことができるようにしたいのですがどのようなORDERBY式で異なるプロパティを使用する必要があるため

が動作していない、それ以下のコードのようなものを使用しています。

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 + ".")); 

コンパイラは、orderExpressionをdelcaringする行に満足していません。実行時にFuncのタイプを設定する方法はありますか?

答えて

3

ダイナミックなLinq拡張メソッドのように見えます。私はそれをあまりにも難しくしていた。

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

はい、DynamicLinqはIComparerを使用してソートすることはできません。私はそれにsolutionを持っています。

関連する問題