Вопрос

У меня есть хороший вызов LINQ.Я хотел бы отфильтровать некоторые данные на дату с использованием фильтрации.Это должно работать так:

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

должен отфильтровать запрос, чтобы все «поставки» до сегодняшнего дня возвращаются.Объект запроса имеет iQueryable, и весь запрос должен быть оценен 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;
    }
.

Вы можете видеть, я хочу преобразовать выражение S=> DateTime?на S=> Bool, чтобы быть оцененным.Как я могу заставить это работать?

Спасибо за чтение. Martijn

Удат: Я оказался с этим (спасибо rdvanbuuren)

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

Это было полезно?

Решение

взглянуть на Как реализовать метод с параметром выражения C #

.

Я думаю, что именно то, что вам нужно, но с выражением.гертанореквалом или выражением.Удачи!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top