문제

나는 멋진 LINQ 도전을 가지고 있습니다.필터링 기능을 사용하여 날짜에 일부 데이터를 필터링하고 싶습니다.다음과 같이 작동해야합니다 :

ApplyDateFilterEx(query,null, DateTime.Today, s => s.CreatedDate);
.

오늘날까지 모든 '선적'이 모두 반환되도록 쿼리를 필터링해야합니다.쿼리 개체는 iQuelyable이며 전체 쿼리는 EF5로 평가되어야하므로 SQL로 변환해야합니다.

이것은 지금까지 가지고있는 것입니다 (컴파일되지 않음) :

private static IQueryable<Shipment> ApplyDateFilterEx(IQueryable<Shipment> query, DateTime? minDate, DateTime? maxDate, Expression<Func<Shipment, DateTime?>> dateMember)
    {
        if (minDate != null)
        {
            //convert func to expression so EF understands
            Expression<Func<Shipment, bool>> where = x => minDate <= dateMember(x);
            query = query.Where(where);
        }
        if (maxDate != null)
        {
            Expression<Func<Shipment, bool>> where = x => dateMember(x) <= maxDate;
            query = query.Where(where);
        }

        return query;
    }
.

식을=> DateTime을 변환하고 싶습니다.평가할 S=> BOOL.어떻게 일할 수 있습니까?

읽어 주셔서 감사합니다. Martijn

udpate : 나는 이것으로 끝내었다 (rdvanbuuren 덕분에)

 var predicate = Expression.Lambda<Func<Shipment, bool>>(
                    Expression.GreaterThanOrEqual(
                        selector.Body,
                        Expression.Constant(dateFilter.MinDate, typeof (DateTime?))
                        ), selector.Parameters);
.

도움이 되었습니까?

해결책

표현식 매개 변수가있는 방법을 구현하는 방법 C # / 나 P>

나는 그것이 당신이 필요로하는 것이 정확히 그렇지 만, expression.greaterthanorequal 또는 expression.Ressthanorequal.행운을 빌어!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top