3
표현식으로 제공되는 하나의 배열에서 값을 읽어야합니다. 표현식에서리스트 값을 추출하는 방법
나는이 방법public ExpressionAnalizer<TModel> where TModel : class
{
public string BuildExpression(Expression<Func<TModel, bool>> expression)
{
if (expression?.Body is MethodCallExpression)
return BuildMethodCallExpression(expression);
throw new ArgumentException($"The expression '{expression?.Body}' is unsupported");
}
public string BuildMethodCallExpression(Expression<Func<TModel, bool>> expression)
{
var body = expression.Body as MethodCallExpression;
//TODO: I can't find a property that has the values of IEnumerable
return null;
}
}
이 그리고이
//PersonModel is a plain class with some properties.
var analizer= new ExpressionAnalizer<PersonModel>("");
var names = new List<string>() {"n1", "n2", "n3"};
//I want to get "Email contains ('n1', 'n2', 'n3')". I can read Email property, the call method name "Contains", but not itself values
var response = analizer.BuildExpression(x => names.Contains(x.Email));
어떤 생각처럼라고? 표현식을 컴파일하려고 생각했지만 System.Runtime.CompilerServices.Closure가 private이고 사용할 수 없기 때문에 "Closure"클래스에 걸렸습니다. 그런데
, 내가email contains ('n1','n2','n3')
같은 문자열과 입력 매개 변수를 얻을 필요가 편집
1.0
.NET의 코어를 사용하고있어 항상해야 표현
Expression<Func<TModel, bool>>
이것은 beca 내부적으로 사용,이 방법은 내가 expression.Body 유형을 처리하고 난 다른 사용 사례의 구현이, 내부적으로
x => x.SomeProperty == "n1"
처럼, 어떤 표정을받을 수 있습니다. 입력 표현이 여기에
var someList = new List<string>() { "string1", "anotherString", "finalString" };
someObject.SomeProperty<SomeTModel>(x => someList.Contains(x.SomeProperty))
내가 자세한 내용은 내 질문을 편집 할 수 있습니다. 기본적으로 매개 변수로 IEnumerable을 허용하는 메서드를 사용할 수 없습니다. 너 나 좀 도와 줄 수있어? –