我有一个很好的LINQ挑战。我想使用FilterFunction在日期过滤一些数据。它应该这样工作:

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

udpate: 我最终结束了这个(感谢Rdvanbuuren)

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

有帮助吗?

解决方案

看看 如何实现用表达式参数c#

我认为这正是你需要的,但是用表达式.Greaterthanorequal或表达。祝你好运!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top