Как извлечь имя свойства и значение, передаваемое в выражение>? - PullRequest
7 голосов
/ 15 сентября 2011

Давайте предположим, что у меня есть такой метод:

public static List<T> Get<T>(this SomeObject<T>, Expressions<Func<T,bool>> e){

//get the property name and value they want to check is true / false
...

}

TheObject().Get(x => x.PropertyName == "SomeValue");

Как получить «PropertyName» и «SomeValue», когда я передаю его в метод Get extension?

Ответы [ 3 ]

12 голосов
/ 15 сентября 2011

Я думаю, это то, что вы после

BinaryExpression expression = ((BinaryExpression)e.Body);
string name = ((MemberExpression)expression.Left).Member.Name;
Expression value = expression.Right;


Console.WriteLine(name);
Console.WriteLine(value);

Выход:

PropertyName
SomeValue

Проверка ошибок оставлена ​​в качестве упражнения для читателя ...

0 голосов
/ 15 сентября 2011

Пространство имен System.Web.Mvc может помочь вам перекатить это.Взгляните на ModelMetadata.FromLambdaExpression<TParameter, TValue>

0 голосов
/ 15 сентября 2011
 var expressionBody= e.Body.ToString();

вернет строку, подобную приведенной ниже:

//"(x.PropertyName == \"SomeValue\")"

также существует более точный способ сделать это (например, скомпилировать его), но производительность компиляции выражения действительно плоха для чеговы спрашиваете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...