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文档启用跟踪,并检查服务器跟踪日志。