private bool Method_2(Expression<Func<PersonData, bool>> expression)
{
/* Some code */
}
그래서, method_1
에 내가 PersonData
에 IPerson
을 변경해야합니다 :이처럼 보이는 다른 방법을 호출 할. 어떻게해야합니까?
편집 :
내가 전화
:Method_1(p => p.Id == 1)
내가 조건 (
p.Id == 1
)을 '저장'을 싶지만 또 다른 유형, 즉
IPerson
에이 조건을 실행합니다. 그래서, 내가 표현을 변경하거나
IPerson
편집 II와 새로운 표현 작성해야합니다 :이
private class CustomExpressionVisitor<T> : ExpressionVisitor
{
ParameterExpression _parameter;
public CustomExpressionVisitor(ParameterExpression parameter)
{
_parameter = parameter;
}
protected override Expression VisitParameter(ParameterExpression node)
{
return _parameter;
}
protected override Expression VisitMember(MemberExpression node)
{
if (node.Member.MemberType == System.Reflection.MemberTypes.Property)
{
MemberExpression memberExpression = null;
var memberName = node.Member.Name;
var otherMember = typeof(T).GetProperty(memberName);
memberExpression = Expression.Property(Visit(node.Expression), otherMember);
return memberExpression;
}
else
{
return base.VisitMember(node);
}
}
}
그리고 : 관심있는 사람들을 위해
을, 이것은 내 솔루션 (지금은)입니다 이다 내가 그것을 사용하는 방법 : 당신은 .NET 4 사용하는 경우
public virtual bool Exists(Expression<Func<Dto, bool>> expression)
{
var param = Expression.Parameter(typeof(I));
var result = new CustomExpressionVisitor<I>(param).Visit(expression.Body);
Expression<Func<I, bool>> lambda = Expression.Lambda<Func<I, bool>>(result, param);
bool exists = _repository.Exists(lambda);
return exists;
}
'IPerson'과 'PersonData'사이에는 어떤 관계가 있습니까? – GolfWolf
@ w0lf 아니요, 그들은 서로를 알지 못합니다. 'PersonData'는 인터페이스의 DTO 버전 ('IPerson')입니다. – Martijn
어떻게 할 수 있는지 모르겠습니다. 구체적인 표현식이 어떻게 생겼는지 예를 게시하고 수동으로 할 수 있다면'PersonData'를 사용하도록 어떻게 변환 할 수 있습니까? – GolfWolf