首页 新闻 会员 周边

linq to sql及过滤数据

0
[已解决问题] 解决于 2015-10-22 11:40
from b in  session.Query<EquData>() where  DateTime.Parse(b.PLAN_DATE) >= start && DateTime.Parse(b.PLAN_DATE) <= end select  b;
list = session.Query<EquData>().ToList();
                    list = list.Where(c => Convert.ToDateTime(c.PLAN_DATE) >= start && Convert.ToDateTime(c.PLAN_DATE) <= end).ToList(); 

上面那个报错,下面这个可以成功,什么原理。下面这个查询全部再过滤肯定影响性能。求指教。

lovejean的主页 lovejean | 初学一级 | 园豆:186
提问于:2015-10-22 09:34
< >
分享
最佳答案
0

报的是不支持的方法吧.datetime.parse是不支持的.而且本来你这样的数据库查询就是会全表扫描的.因为你要对字段进行运算索引都没用.最好建一个日期值字段建个索引查

奖励园豆:5
吴瑞祥 | 高人七级 |园豆:29449 | 2015-10-22 09:48

Convert.ToDateTime(也不支持, 还有啥办法吗

lovejean | 园豆:186 (初学一级) | 2015-10-22 09:49

.Select(x=>Convert.ToDatetime(x.plandate)>=start),这样也行,只是返回的数据是bool

lovejean | 园豆:186 (初学一级) | 2015-10-22 09:55

@lovejean: tolist之后的吗?你想一下在sql里怎么把字符串转日期格式就可以了然后找法子.

吴瑞祥 | 园豆:29449 (高人七级) | 2015-10-22 10:06
其他回答(2)
-1

仔细想一下就知道了,linq最终还是翻译成sql,你的datetime.parse翻译成什么?

顾晓北 | 园豆:10844 (专家六级) | 2015-10-22 10:00
select * from EquData t where t.plan_date between '2015-08-13' and '2015-08-15'   在Oracle数据库中可以执行,怎么翻译成linq

 

支持(0) 反对(0) lovejean | 园豆:186 (初学一级) | 2015-10-22 10:30

linq中string 和string 不能比较

支持(0) 反对(0) lovejean | 园豆:186 (初学一级) | 2015-10-22 10:30

@lovejean: 那你自己去搜linq oracle 时间比较 不就行了。。。

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2015-10-22 10:44
0

http://www.itdos.com/CSharp/20150408/0127321.html

Where(a => a.StartTime.CompareTo('2015-04-08') >= 0)

lovejean | 园豆:186 (初学一级) | 2015-10-22 11:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册