Например, «OConnor» будет соответствовать « о'Коннор» в этом непринужденном поиске, а «жан-люк» будет соответствовать «Жан-Люку». и т. д.
Я написал вспомогательный метод, который связывает вызов replace() для каждого переданного значения, чтобы удалить значение из входной строки. Этот метод работает, но я не могу понять, как поддерживать строгую типизацию при его использовании как с выражением доступа к свойству, так и с константной строкой.
Вот строго типизированный вариант, принимающий функции. выражения, возвращающие строку:
Код: Выделить всё
private Expression ExpressionStrip(Expression exprStr, params string[] saValues)
{
if (saValues.Length == 0)
{
return exprStr.Body;
}
var exprEmptyString = Expression.Constant("");
var exprResult = Expression.Call(exprStr.Body, "Replace", null, Expression.Constant(saValues[0]), exprEmptyString);
for (var i = 1; i < saValues.Length; i++)
{
exprResult = Expression.Call(exprResult, "Replace", null, Expression.Constant(saValues[i]), exprEmptyString);
}
return exprResult;
}
Код: Выделить всё
var stripped = ExpressionStrip(p => p.FullName.LastName, " ", "-", "'", "’");
Код: Выделить всё
var stripped2 = ExpressionStrip("Jean-Luc", " ", "-", "'", "’");
Код: Выделить всё
private Expression ExpressionStrip(Expression str, params string[] saValues)
{
if (saValues.Length == 0)
{
return str;
}
var exprEmptyString = Expression.Constant("");
var exprResult = Expression.Call(str, "Replace", null, Expression.Constant(saValues[0]), exprEmptyString);
for (var i = 1; i < saValues.Length; i++)
{
exprResult = Expression.Call(exprResult, "Replace", null, Expression.Constant(saValues[i]), exprEmptyString);
}
return exprResult;
}
Код: Выделить всё
// Where exprStr is of type Expression
ExpressionStrip(exprStr.Body, " ", "-", "'", "’");
Код: Выделить всё
ExpressionStrip(Expression.Constant("Jean-Luc"), " ", "-", "'", "’");
Я попробовал эту подпись: Expression ExpressionStrip(Expression str, params нить[] saValues), но LambdaExpression.Body возвращает Expression, который нельзя преобразовать в Expression, поэтому я не могу использовать его с моим exprStr.Body .
Можно ли каким-либо образом привести/преобразовать/извлечь строго типизированное тело функции из выражения лямбда-функции?>
Подробнее здесь: https://stackoverflow.com/questions/792 ... expression