2011-11-25 1 views
0

(표현 >) 내가 유형의 매개 변수를 받아들이는 방법에 Where 절</p> <pre><code>Expression<Func<T, bool>> </code></pre> <p>에 대한 표현을 구축하려는

Expression<Func<T, DateTime>> 

날짜, 시간 및 날짜 속성에 비교 절을 추가하는 등 내부 속성을 비교하기 위해 DateTime 속성을 조작하고 싶습니다. 내가 좋아하는 것

public static class MyUtils 
{ 
    public static Expression<Func<T, bool>> GetTime<T>(this Expression<Func<T, bool>> pExp, Expression<Func<T, DateTime>> MyProperty, int day, int month, int year) 
    { 
    } 
} 

이처럼 사용 :

Expression<Func<MyClass, bool>> vExpression = p => false; 
vExpression = vExpression.GetTime<MyClass>(c => c.MyDate, 21, 12, 2012); 

을 그래서 내가 "내 사이에 비교가 방법의 끝에서 MyDate가

내 방법은 다음과 같다 "속성과 개별 날짜 값.

이 작업을 수행 할 수 있습니까?

+0

내게 문제가없는 것 같습니까? – Polity

+0

일, 월 및 연도 속성을 사용하고 싶습니다. –

답변

2
이 같은

아마 뭔가 :

static Expression<Func<T, bool>> GetTime<T>(
    Expression<Func<T, DateTime>> expression, 
    DateTime compare 
) 
{ 
    var comparison = Expression.Equal(expression.Body, Expression.Constant(compare)); 
    return Expression.Lambda<Func<T, bool>>(comparison, expression.Parameters); 
} 

그런 다음 수행 할 수 있습니다

Expression<Func<MyClass, bool>> vExpression = GetTime<MyClass>(
    c => c.MyDate, 
    new DateTime(2012, 12, 21) 
); 

편집

위의 코드는 당신이 기반으로하는 새로운 식 트리를 만들 수있는 방법을 보여줍니다 오래된 것. 허용되는 구문을 사용하여 새 표현식 트리를 만들 수 있습니다. 다음은 약간 더 복잡한 예입니다.

static Expression<Func<T, bool>> GetTime<T>(
    Expression<Func<T, DateTime>> expression, 
    DateTime compare 
) 
{ 
    var comparison = Expression.AndAlso(
     Expression.AndAlso(
      Expression.GreaterThanOrEqual(
       Expression.Property(expression.Body, "Year"), 
       Expression.Constant(compare.Year) 
      ), 

      Expression.GreaterThanOrEqual(
       Expression.Property(expression.Body, "Month"), 
       Expression.Constant(compare.Month) 
      ) 
     ), 

     Expression.GreaterThanOrEqual(
      Expression.Property(expression.Body, "Day"), 
      Expression.Constant(compare.Day) 
     ) 
    ); 

    return Expression.Lambda<Func<T, bool>>(comparison, expression.Parameters); 
} 
+0

미안 해요. "Day", "Month"및 "Year"속성을 서로 독립적으로 조작하고 싶습니다. 예를 들어, 범위 사이 필터 : dateProperty.Year> = 2,011 && dateProperty.Year> = 2,012 && dateProperty.Month> = 5 && dateProperty.Month> = 8 && dateProperty.Day> = 15 && dateProperty.Year> = 25 –

+0

고마워요 @ 보얀, 그게 내가 찾고 있던거야. –

관련 문제