2

私は動的Linqを使用しており、where句が機能しています。現在、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 を宣言する行に満足していません。実行時に Func のタイプを設定する方法はありますか?

4

2 に答える 2

3

動的な Linq 拡張メソッドがすべてを処理してくれるようです。頑張りすぎました。

var result = from item in table.Where("owner = \"joe\"").OrderBy("inserted") select item;
result.ToList().ForEach(m => Console.WriteLine("inserted=" + m.Inserted + "."));
于 2009-06-05T05:01:11.090 に答える
0

ええ - ただし、1 つの問題は、DynamicLinq では IComparer を使用してソートできないことです。私はそれに対する解決策を持っています。

于 2009-10-29T11:45:24.677 に答える