LINQ to Entities无法识别方法' get_Day()'方法

时间:2015-04-27 17:49:42

标签: c# linq entity-framework

所以我试图创建一个表达式,在通过表达式指定的特定日期进行日期时间比较。但是我一直得到错误LINQ to Entities无法识别方法' get_Day()'方法

获取日但是能够与Entity Framework一起使用,您可以访问该属性并在正常构建lamba时进行比较。

通常它会遵循类似

的sql
WHERE ((DATEPART (day, [Project6].[C1])) >= (DATEPART (day, '4/28/2015 12:00:00 AM')))

这是我的功能有谁知道我能做些什么来解决这个错误?

public IQueryable<T> SetDateCompare<T>(IQueryable<T> OriginalQuery, Expression<Func<T, DateTime>> getDateFunc, DateTime ComparisonDate, bool isGreaterThan = true)
where T : class
{
    if (isGreaterThan)
    {

        Expression left = Expression.Call(getDateFunc.Body, typeof(DateTime).GetMethod("get_Day"));
        Expression right = Expression.Constant(ComparisonDate.Day, typeof(int));
        Expression res = Expression.GreaterThan(left, right);

        var whereCallLambda = Expression.Lambda<Func<T, bool>>(Expression.GreaterThanOrEqual(left, right), getDateFunc.Parameters.Single());

        MethodCallExpression whereCall = Expression.Call(typeof(Queryable),
                                                                "Where",
                                                                new Type[] { OriginalQuery.ElementType },
                                                                OriginalQuery.Expression,
                                                                whereCallLambda);

        OriginalQuery = OriginalQuery.Provider.CreateQuery<T>(whereCall);
    }

    return OriginalQuery;

}

1 个答案:

答案 0 :(得分:4)

您可能希望使用SqlFunctions.DatePart - 这基本上就是在SQL中使用DATEPART创建查询的方式。