2009-07-27 6 views
0
AddOptional<tblObject>(x =>x.Title, objectToSend.SupplementaryData); 

private static void AddOptional<TType>(Expression<Func<TType,string>> expr, Dictionary<string, string> dictionary) 
{ 
    string propertyName; 
    string propertyValue; 

    Expression expression = (Expression)expr; 
    while (expression.NodeType == ExpressionType.Lambda) 
    { 
     expression = ((LambdaExpression)expression).Body; 
    } 
} 

上記のコードでは、私は不動産の名前ではなく、プロパティのタイトルの実際の価値を取得したいと思いますか?式ツリーlinqパラメータの値を取得しますか?

答えて

3
private static void Main(string[] args) 
{ 
    CompileAndGetValue<tblObject>(x => x.Title, new tblObject() { Title = "test" }); 
} 

private static void CompileAndGetValue<TType>(
    Expression<Func<TType, string>> expr, 
    TType obj) 
{ 
    // you can still get name here 

    Func<TType, string> func = expr.Compile(); 
    string propretyValue = func(obj); 
    Console.WriteLine(propretyValue); 
} 

ただし、これは非常に遅くなる可能性があることに注意する必要があります。あなたのケースでどのように実行するかを測定する必要があります。あなたがオブジェクトを渡すために好きではない場合

private static void Main(string[] args) 
    { 
     var yourObject = new tblObject {Title = "test"}; 
     CompileAndGetValue(() => yourObject.Title); 
    } 


    private static void CompileAndGetValue(
     Expression<Func<string>> expr) 
    { 
     // you can still get name here 

     var func = expr.Compile(); 
     string propretyValue = func(); 
     Console.WriteLine(propretyValue); 
    } 
+0

こんにちは、おかげで、それはない私が探しているものだ、私はむしろ、メソッドにのみ式を渡し、その名前から取得したいと思いパラメタのそれは価値がある、それは可能ですか? –

+0

今使っているフォームでは不可能です。オブジェクトを渡すわけではないので、コードはどこから価値を得るべきですか?私はあなたのソリューションをすぐに修正しようとします。 – maciejkow

+0

私は新しいソリューションを追加しました。 – maciejkow

関連する問題