首页 新闻 搜索 专区 学院

EntityFrameWork 动态生成lamda表达式出错

0
悬赏园豆:10 [已解决问题] 解决于 2014-04-08 19:33

应用场景:

  在记录数据的时候, 通常会记录数据的操作时间,在查询数据的时候,用户选择一个时间段,从数据库查询用户选择的时间段数据。

  但在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为用户选择的时间

beggar_的主页 beggar_ | 初学一级 | 园豆:23
提问于:2014-04-08 17:21
< >
分享
最佳答案
1

试试

Expression.GreaterThanOrEqual(
Expression.Property(paramExpr, "LogDate"),
Expression.Constant(Convert.ToDateTime(tbFrom.Text), typeof(DateTime?))

收获园豆:10
诶碧司 | 小虾三级 |园豆:1912 | 2014-04-08 18:31

多谢兄台,用你说的果然搞定了,居然在一个"?"号上面浪费了这么多的时间!我还准备重新去找DATETIME里面的方法,看有没有能反射调用....

 

beggar_ | 园豆:23 (初学一级) | 2014-04-08 19:13

请问,在一个动态创建的条件里面如何动态的使用Expression.And()  和Expression.Or()

比如:t=>t.name=="aaaa" and (t.age==10 or t.age==15)

beggar_ | 园豆:23 (初学一级) | 2014-04-08 21:23

@beggar_: 不是像下面这样吗

Expression.And(Expression.Equal(exp1, exp2),Expression.Or(Expression.Equal(exp3,exp4),Expression.Equal(exp5,exp6)))

诶碧司 | 园豆:1912 (小虾三级) | 2014-04-09 22:42
其他回答(3)
0

这个问题我也遇到了,GreaterThanOrEqual好像只能支持值类型的,String要用String.compare,Nullble<T>用什么我也不知道,目前我是手工写的,动态的难搞。

happydaily | 园豆:674 (小虾三级) | 2014-04-08 17:33

哎,一个下午了,也没有找到对应的办法和原因

支持(0) 反对(0) beggar_ | 园豆:23 (初学一级) | 2014-04-08 18:24
0

初次用这个东西,正好解决我的问题

xiaowei子渝 | 园豆:160 (初学一级) | 2014-09-12 18:17
0

我想问个问题,动态处理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);

我想啸天 | 园豆:97 (初学一级) | 2015-01-14 16:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册