2

次のように呼び出すことができるメソッドを作成しようとしています:

var myCommand = Command.Where(x => x.Name == "grep" && x.Switch == "x");

私がやろうとしているのは、結果の式を次のように解析することです:

public static string FindBy(Expression<Func<T, bool>>  expression)
{
    var condition1Key = ? //condition1Key = "Name"
    var condition1Value = ? //condition1Value = "grep"
    var condition2Key = ? //condition1Key = "Switch"
    var condition2Value = ? //condition1Value = "x"
    
   return string.Format("Looking for commands with {0} = {1} and {2} = {3}",
                         condition1Key, condition1Value, 
                         condition2Key, condition2Value);
}

この投稿を見つけましたが、かなり古く、適切な回答がありませんでした。

Expression着信を解析して必要なものを引き出すにはどうすればよいですか?

4

2 に答える 2

2

あなたが言及したSOスレッドのリンクをたどると、MSDNの式のエントリに到達します。特に、「式ツリーの解析」セクションでは、次の例が役立ちます。

// Create an expression tree.
Expression<Func<int, bool>> exprTree = num => num < 5;

// Decompose the expression tree.
ParameterExpression param = (ParameterExpression)exprTree.Parameters[0];
BinaryExpression operation = (BinaryExpression)exprTree.Body;
ParameterExpression left = (ParameterExpression)operation.Left;
ConstantExpression right = (ConstantExpression)operation.Right;

Console.WriteLine("Decomposed expression: {0} => {1} {2} {3}",
              param.Name, left.Name, operation.NodeType, right.Value);

// This code produces the following output:
// Decomposed expression: num => num LessThan 5    

ツリー上を歩きやすくするクラスを作成することもできます:方法: 式ツリー ビジターを実装する

于 2012-04-27T00:58:30.180 に答える
2

Expressionツリーを解析できます。MSDN の基本的な例を次に示します: http://msdn.microsoft.com/en-us/library/bb397951.aspx

その他のブログ投稿: http://blogs.msdn.com/b/charlie/archive/2008/01/31/expression-tree-basics.aspx

そして、ここに素晴らしい答えがあります: https://stackoverflow.com/a/239359/29093

于 2012-04-27T00:49:02.387 に答える