Entity framework 如何在LINQ to实体的表达式中使用DateTime?

Entity framework 如何在LINQ to实体的表达式中使用DateTime?,entity-framework,linq,expression,Entity Framework,Linq,Expression,我知道如何构建表达式树来查询实体框架,例如 string propertyName = "Name"; string keyword = "Methanol"; ParameterExpression parameter = Expression.Parameter(typeof(Chemical), "x"); MemberExpression me = Expression.Property(parameter, prope

我知道如何构建表达式树来查询实体框架,例如

        string propertyName = "Name";
        string keyword = "Methanol";

        ParameterExpression parameter = Expression.Parameter(typeof(Chemical), "x");

        MemberExpression me = Expression.Property(parameter, propertyName);
        ConstantExpression constant = Expression.Constant(keyword, typeof(string));
        BinaryExpression body = Expression.Equal(me, constant);
        var isEqualExpressionTree = Expression.Lambda<Func<Chemical, bool>>(body, new[] { parameter });
        Expression<Func<Chemical, bool>> funcExpression = (Expression<Func<Chemical, bool>>)isEqualExpressionTree;

        using (var mLEntities = new myLab02Entities1())
        {
            var cl = mLEntities.Chemicals.AsQueryable().Where(funcExpression).ToList();       
            return cl;

        }
string propertyName=“Name”;
字符串关键字=“甲醇”;
ParameterExpression参数=表达式参数(类型为(化学),“x”);
MemberExpression me=Expression.Property(参数,propertyName);
ConstantPression常量=表达式.常量(关键字,类型(字符串));
BinaryExpression body=表达式.Equal(me,常量);
var isEqualExpressionTree=Expression.Lambda(body,new[]{parameter});
表达式funcExpression=(表达式)isEqualExpressionTree;
使用(var mLEntities=new myLab02Entities1())
{
var cl=mLEntities.Chemicals.AsQueryable().Where(funcExpression.ToList();
返回cl;
}
“名称”是SQL数据库中的一个字段,应检查其是否为“甲醇”。内部构建的Lambda是: {x=>(x.Name==“甲醇”)}。现在我想测试数据库的DateTime字段,但只测试Date部分。所以我的Lambda会

{x=>DbFunctions.TruncateTime(x.EntryDate)==DbFunction.TruncateTime(testDate)}。它按原样工作,但如何将其转换为表达式? 谢谢,哈奇

string propertyName=“EntryDate”;
 string propertyName = "EntryDate";
 DateTime testDate = DateTime.Now;            

 ParameterExpression parameter = Expression.Parameter(typeof(Chemical), "x");
 MemberExpression me = Expression.Property(parameter, propertyName);
 var ce = Expression.Convert(me, typeof(DateTime?));
 MethodCallExpression mc = Expression.Call(null, typeof(DbFunctions).GetMethod("TruncateTime", new Type[] { typeof(DateTime?) }), ce);
 ConstantExpression constant = Expression.Constant(testDate, typeof(DateTime?));
 BinaryExpression body = Expression.Equal(mc, constant);
 var isEqualExpressionTree = Expression.Lambda<Func<Chemical, bool>>(body, new[] { parameter });
 Expression<Func<Chemical, bool>> funcExpression = (Expression<Func<Chemical, bool>>)isEqualExpressionTree;
DateTime testDate=DateTime.Now; ParameterExpression参数=表达式参数(类型为(化学),“x”); MemberExpression me=Expression.Property(参数,propertyName); var ce=Expression.Convert(me,typeof(DateTime?); MethodCallExpression mc=Expression.Call(null,typeof(DbFunctions).GetMethod(“TruncateTime”,新类型[]{typeof(DateTime?}),ce); ConstantPression常量=表达式.常量(testDate,typeof(DateTime?); BinaryExpression体=表达式.Equal(mc,常量); var isEqualExpressionTree=Expression.Lambda(body,new[]{parameter}); 表达式funcExpression=(表达式)isEqualExpressionTree;
Hi Akos,感谢您的回复。我发现Typeof(DbFunctions)有一个错误:找不到类型或命名空间“DbFunctions”。我无法将“using System.Data.Entity”添加到最近的项目中,尽管这在该解决方案的其他项目中是可能的。我试图找出这里发生了什么。它已安装,但我尝试再次安装。嗨,Akos,我已将您的代码转移到一个项目中,其中包含System.Data.Entity命名空间,它没有显示任何错误。不幸的是,当我在调试器中运行代码时,我得到了MethodCallExpression行的异常,但我看不到异常消息。我明天会设法把它修好。哈克亚,你运气好吗?如果你需要帮助,我可以帮你找到任何bug。对我来说,这很有效,所以我很好奇你这方面到底出了什么问题。嗨,阿科斯,我真的很感激你能帮助我。运行代码时,MethodCallExpression行引发异常:System.ServiceModel.FaultException:由于内部错误,服务器无法处理请求。有关错误的详细信息,请在服务器上启用IncludeExceptionDetailInFaults(从ServiceBehaviorAttribute或从配置行为),以便将异常信息发送回客户端,或者根据Microsoft.NET Framework 3.0 SDK文档启用跟踪,并检查服务器跟踪日志。