2012-09-06 8 views
6

ExpressionSerializationを完全条件式、つまり3項演算子で使用して式ツリーを非正規化します。私は三項演算子を使用していた場合には、以下のリンクからif-elseを表現するための式ツリーを構築する

は、コードを使用してFullConditionExpression(システムサポートされていない例外)が発生する:任意の最新バージョンは、上記のリンクで使用可能な

http://archive.msdn.microsoft.com/exprserialization

ありますか?

http://metalinq.codeplex.com/

しようとしました。この後から

public Expression<Func<object, string>> LabelCriteria { get; set; } 

LabelCriteria = x => 
    { 
     if (true) 
      return "Cash"; 
     else  
      return " "; 
    } 

発現があればサポートしていません - elseブロックを。文の本体と「ラムダ式は、式ツリーに変換することができないように、それはエラーになりますそれを行うには、他の方法があります

+1

は、x =>「現金」あまりにもシンプルですか? – BlackBear

+0

ちょうどそのコードスニペット。私は実際にelse-if else-if else elseを使用したいと考えています。 – StackOverflowVeryHelpful

答えて

5

あなたがここのようなメソッドを使用できます。

string myFunction(Object obj){ 
    //here your if-else... 
} 

LabelCriteria = x => myFunction(x); 
+2

+1、あなたはそれに値する:P – BlackBear

3

あなたは条件演算子を使用する必要があります。。

LabelCriteria = x => true ? "Cash" : " "; 

をそれはそれかもしれ条件が定数式(true)であるため、コンパイラは、しかし、一定の折りたたみの発現を変更しているが、変数を使用して試してみて、何が起こるか見

+0

真は単にコードスニペットに使用されます。基本的に複数のものをチェックして、真か偽かを評価します。私はまたelse-if else-if elseループを使用したいと思っています。 – StackOverflowVeryHelpful

+0

@ user1650470式lambdaにif-elseを使用することはできません。条件演算子を使用できます。複数の条件がある場合、複数の条件演算子を使用します: 'x => condition1?結果1:条件2?結果2:条件3?結果3:結果4; '。ステートメントラムダ( 'x => {if(condition1)return result1; else return result2;}')は式ツリーに変換できません。 – phoog

0

私は解決策を見つけました。私は、以下のリンクからのコードを使用してコード

のこの特定の部分を使用していた

広告:

http://archive.msdn.microsoft.com/exprserialization

は、それは完全な条件式を処理していませんでしたが、それは条件式を処理します。私は、デシリアライズ時にスイッチケースにFullConditionalExpressionを追加しました。スイッチのConditionalExpressionと同じです。

1

あなたはhttps://msdn.microsoft.com/en-us/library/bb397951.aspx

を参照して、式のAPIを明示的に式ツリーを構築することができ、ここで、あなたの問題のためのコードです:

 ParameterExpression x = Expression.Parameter(typeof (object), "x"); 
     ConditionalExpression body = Expression.IfThenElse(
      Expression.Constant(true), 
      Expression.Constant("Cash"), 
      Expression.Constant(" ") 
      ); 

     LabelCriteria = Expression.Lambda<Func<object, string>>(body, x); 
関連する問題