Pergunta

Eu tenho um bom Linq desafio.Eu gostaria de filtrar dados em uma Data usando um FilterFunction.Ele deve funcionar como este:

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

Deve filtrar a consulta, de modo a que todos os envios dos' até hoje, são retornados.O objeto de consulta é de IQueryable e toda a consulta deve ser avaliada por EF5 e, portanto, deve-se converter para o SQL.

Isso é o que eu tenho até agora (NÃO de COMPILAÇÃO):

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;
    }

Você pode ver que eu quero converter a expressão s=>DateTime?para s=> Bool ser avaliada.Como posso chegar a este trabalho?

Obrigado por ler.Martijn

UDPATE:Eu acabei com isso (graças a rdvanbuuren)

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

Solução

Ter um olhar para Como implementar o método com parâmetro de expressão c#

Eu acho que isso é exatamente o que você precisa, mas com uma Expressão.GreaterThanOrEqual ou Expressão.LessThanOrEqual.Boa sorte!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top