应用场景:
在记录数据的时候, 通常会记录数据的操作时间,在查询数据的时候,用户选择一个时间段,从数据库查询用户选择的时间段数据。
但在EF里面使用动态生成lamda表达式方法的时间,对时间进行比较,我使用了Expression.GreaterThanOrEqual()方法,但是系统运行后提示:
没有为类型“System.Nullable`1[System.DateTime]”和“System.DateTime”定义二进制运算符 GreaterThanOrEqual。
个人理解:难道是没有为时间定义比较的方法?不知道有那位兄台碰到同样的问题,请各位赐教!
Expression.GreaterThanOrEqual(
Expression.Property(paramExpr, "LogDate"),
Expression.Constant(Convert.ToDateTime(tbFrom.Text), typeof(DateTime))
注:tbFrom.Tex为用户选择的时间
试试
Expression.GreaterThanOrEqual(
Expression.Property(paramExpr, "LogDate"),
Expression.Constant(Convert.ToDateTime(tbFrom.Text), typeof(DateTime?))
多谢兄台,用你说的果然搞定了,居然在一个"?"号上面浪费了这么多的时间!我还准备重新去找DATETIME里面的方法,看有没有能反射调用....
请问,在一个动态创建的条件里面如何动态的使用Expression.And() 和Expression.Or()
比如:t=>t.name=="aaaa" and (t.age==10 or t.age==15)
@beggar_: 不是像下面这样吗
Expression.And(Expression.Equal(exp1, exp2),Expression.Or(Expression.Equal(exp3,exp4),Expression.Equal(exp5,exp6)))
这个问题我也遇到了,GreaterThanOrEqual好像只能支持值类型的,String要用String.compare,Nullble<T>用什么我也不知道,目前我是手工写的,动态的难搞。
哎,一个下午了,也没有找到对应的办法和原因
初次用这个东西,正好解决我的问题
我想问个问题,动态处理lamda表达式。场景:(如图)点击不同的类别 如何处理?
后台处理代码:IQueryable<dt_Loan> LoadPagerEntities<S>(int pageSize, int pageIndex, out int total, Func<dt_Loan, bool> whereLambda, bool isAsc, Func<dt_Loan, S> orderByLambda);