2010-03-30 3 views
1

부모 엔티티의 "Any"연산자에서 사용할 수 있도록 여러 엔티티 표현식을 만들고 결합해야합니다. 코드는 다음과 같습니다.linq-to-sql 결합한 자식 표현

Expresion<Child, bool> startDateExpression; 

if(String.IsNullOrEmpty(startDate) 
    startDateExpression = t => true; 
else 
    startDateExpression = t => t.start_date >= startDate; 

Expression<Child, bool> endDateExpression; 

if(String.IsNullOrEmpty(endDate) 
    endDateExpression = t => true; 
else 
    endDateExpression = t => t => t.end_date <= endDate; 


.... 
ParameterExpression param = startDateExpression.Parameters[0]; 

Expression<Func<T, bool>> Combined = Expression.Lambda<Func<Child, bool>>( 
     Expression.AndAlso(startDateExpression.Body, endDateExpression.Body), param); 

//but now I am trying to use combined expression on parent 
//this line fails just to give an idea on what I am trying to do: 
//filter type is IQueryable<Parent>; 
var filter = filter.Where(p =>p.Children.Any(Combined)); 

어떻게하면됩니까? 자식 식을 부모 식으로 변환해야 할 수도 있습니다.

+0

가 실패하는 방법 –

+0

오류를 컴파일 - 대리인이 1 인자에게 답장을 – Victor

답변

0

람다 함수를 사용하는 대신 표현식을 작성하는 이유를 완전히 모르겠습니다. 다음을 시도해 보셨습니까?

var filter = filter.Where(p =>p.Children.Any(
    child => (String.IsNullOrEmpty(startDate) || child.start_date >= startDate) && 
      (String.IsNullOrEmpty(endDate) || child.end_date <= endDate) 
)); 
+0

감사를 고려하지 않습니다 그것은 내가 사용하는 표현을 할 필요가 동적으로 생성 된 검색 기준이기 때문에, 내 갱신 – Victor

+0

@VictorS를 참조하십시오?. 난 아직도 돈 ' 표현식을 직접 작성해야하는 이유를 확인하십시오. 업데이트 된 답변으로 사용자의 요구 사항이 해결되는지 확인하십시오. –

+0

child.start _date 및 child.end_date는 DateTime입니까? 하지만 대신 DateTime.MinimumValue를 사용할 수 있습니다 – Victor