首页 新闻 会员 周边 捐助

请问Lambda 表达式或者linqtosql怎么把datatime改换为data!详情见下图

0
悬赏园豆:200 [待解决问题]

我想做某一天的数据统计,我数据库是2016-08-04 15:00:00 2016-08-04 12:00:00的数据。我现在想统计这两条数据。我想的是转换时间成data。用sql可以使用date_format(UploadDate,'%c'),但是他们不允许这样的错误。我这样写都不行

_re.GetEntities(x =>x.CreateDate.GetValueOrDefault().Date==x.CreateDate.GetValueOrDefault().Date )

报错LINQ to Entities 不识别方法“System.DateTime ToDateTime(System.String)”,因此该方法无法转换为存储表达式。

想请问怎么应该怎么处理时间。把时分秒去掉,只留下日期!百度看见别人要在外面处理。但是这是在通过实体在数据库获取的数据。怎么在外面处理呢?

问题补充:

我是datatime?类型

程序员一号的主页 程序员一号 | 初学一级 | 园豆:2
提问于:2016-08-04 15:43
< >
分享
所有回答(4)
0

这种你用大于小于时间区间不久好.干嘛非要取日期.直接>目标日期.小于目标日期加一天

吴瑞祥 | 园豆:29449 (高人七级) | 2016-08-04 15:53

你好。我获取的是全部的。所以只能在_re.GetEntities(x =>x.CreateDate.GetValueOrDefault().Date==x.CreateDate.GetValueOrDefault().Date )

这里操作。我的实体时间类型是datatime?。是不允许用tostring的。那请问怎么大于小于区间

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-04 16:21

@程序员一号: 其实你一直没说你的需求.所以大家都是在猜 .

我猜你是要查询某一天的数据.比如查询1号的所有记录.是这样吗?

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-08-04 16:38

@吴瑞祥: 是的。

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-04 17:21

就是我数据库里面日期是带时分秒的。我只想要知道这一天有多少数据。所以才问这么转换成日期。

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-04 17:25

@程序员一号: 那我前面已经说的非常清楚了.

_re.GetEntities(x =>
    x.CreateDate>new DateTime(2008,1,1)
    &&x.CreateDate<new DateTime(2008,1,1).AddDay(1))
支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-08-04 17:29

@吴瑞祥: 我现在就在试。如果后续还有请教你的地方,希望可以回答我。谢谢!

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-04 17:36

@吴瑞祥: 我采纳了你的方式。但是报错。

_repository.GetEntities(x=>x.CreateDate>=x.CreateDate.GetValueOrDefault().AddDays(-1).AddSeconds(1)&&x.CreateDate<=x.CreateDate.GetValueOrDefault().AddDays(1).AddSeconds(-1))

不识别方法“System.DateTime ToDateTime(System.String)”,因此该方法无法转换为存储表达式。

我现在去查为什么报这个错。但是大哥我这样写可行。或者有没有更好的方式

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-04 17:58

@程序员一号: 你为什么老要去处理字段值.你不是要查询某一个天的吗.为什么还要原字段值?

你重新你说你的业务需求吧.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-08-04 18:01

@吴瑞祥 一图

二图

如上图所示。我想把一图那一天的统计成二图所示。这一天的时分秒的总结成这一天的日期。并统计出这一天有多少个source。所以我一直纠结怎么在原字段上处理

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-05 10:48

@程序员一号: 这种需求加字段和触发器解决啊.

添加更新日期字段.给默认值.然后在触发器中给更新日期赋值.不就好了

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-08-05 10:55

@吴瑞祥: 好吧!不好意思。我新手。不知道怎么弄。感谢。有没有简单的方式。

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-05 11:26
0

如楼上所说,自己先把参数弄好吧,自己在调用之前就格式化好。。。

真想用数据库函数,需要配置,挺麻烦的。。。

顾晓北 | 园豆:10898 (专家六级) | 2016-08-04 16:16

我就是不明白。怎么在调用之前格式好。╮(╯▽╰)╭。我弄了一天了。才来求助的

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-04 16:22

@程序员一号: 啊???

var date=x.CreateDate.GetValueOrDefault().Date;

_re.GetEntities(x =>x.CreateDate.GetValueOrDefault().Date==date);

这样不行?

支持(0) 反对(0) 顾晓北 | 园豆:10898 (专家六级) | 2016-08-04 16:34

@顾晓北: 这个x是调用这个方法得到的_re.GetEntities。只能在这个里面进行操作。具我所知,这样不行

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-04 17:20

@程序员一号: 哦,_re.GetEntities(x =>x.CreateDate==date);这样,如果你的createDate不单包括日期,还包括时间,那肯定是不能相等的,那就肯定是需要调用函数来转换,但时间一般都是选一个范围,所以你用>=和<=

支持(0) 反对(0) 顾晓北 | 园豆:10898 (专家六级) | 2016-08-04 17:23

@顾晓北: 嗯!尝试中。感谢。我才接触这个东西。所以不是很熟。

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-04 17:39

@顾晓北: 报错。我打算先去解决这个错误。

不识别方法“System.DateTime ToDateTime(System.String)”,因此该方法无法转换为存储表达式。

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-04 17:58

@程序员一号: 你是怎么写的?你现在还没明白么?linq最终还是转换成sql,sql中会有System.DateTime ToDateTime这个方法吗?

支持(0) 反对(0) 顾晓北 | 园豆:10898 (专家六级) | 2016-08-04 18:00

@顾晓北: 好吧。我知道了。我是看有人这样写过。

x.CreateDate.GetValueOrDefault().AddDays(1).AddSeconds(-1)我估计不能这样写吧。不能转换过来。

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-05 10:51

@程序员一号: 当然不能这么写,这么写在程序里是没有问题的,但linq是转换成sql在数据库里执行的,数据库里当然没有这个方法。。。

支持(0) 反对(0) 顾晓北 | 园豆:10898 (专家六级) | 2016-08-05 10:55

@顾晓北: 嗯。我想就是这样了。请问这种情况怎么解决呢。我组长让我自己弄,同事大牛都走了。剩下两个应届毕业生。所以希望能回答下。谢谢

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-05 11:29

@程序员一号: 。。。上面不是都跟你说了么?时间一般是范围选择,比如

xxx.GetEntitys(x=>x.CreateDate>=date.Date&&x.CreateDate<date.AddDays(1).Date)

支持(0) 反对(0) 顾晓北 | 园豆:10898 (专家六级) | 2016-08-05 11:34

@顾晓北: 这个意思明白。谢谢!真正努力发作

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-08 15:33

@程序员一号: 上面我怀疑也有点问题,

应该类似这样吧

var start=DateTime.Now.Date;
var end=start.AddDays(1);
xxx.GetEntitys(x=>x.CreateDate>=start&&x.CreateDate<end);

类似这样子,总之就是在调用之前,要么是可以翻译为sql的数据库表达式,比如子查询,要么就是实实在在的值。。。

支持(0) 反对(0) 顾晓北 | 园豆:10898 (专家六级) | 2016-08-08 15:45

@顾晓北: 是的。我现在换了种方式!暂时没报错。

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-08 15:56
0

x =>DbFunctions.TruncateTime(x.CreateDate)==DbFunctions.TruncateTime(x.CreateDate)

或者用HasValue判断是否有值,单独比较Year、Month、Day

ArthurLi | 园豆:686 (小虾三级) | 2016-08-04 16:24

谢谢。尝试下。

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-04 17:40

不识别方法“System.DateTime ToDateTime(System.String)”,因此该方法无法转换为存储表达式。

报这个错误。我先解决了这个错误了!╮(╯▽╰)╭。烦

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-04 17:59

@程序员一号: 检查下你的代码,看看什么地方用到ToDateTime方法了,改成别的方式。

支持(0) 反对(0) ArthurLi | 园豆:686 (小虾三级) | 2016-08-05 09:01

@Don'tWorryBeHappy: 不行。我试了你的方式。不通过。估计像楼下说的linq转换sql的时候,不识别吧!

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-05 11:02

@程序员一号: x =>x.CreateDate.HasValue && x.CreateDate.Value.Year == x.CreateDate.Value.Year && x.CreateDate.Value.Month == x.CreateDate.Value.Month && x.CreateDate.Value.Day == x.CreateDate.Value.Day

类似这么写试过吗

支持(0) 反对(0) ArthurLi | 园豆:686 (小虾三级) | 2016-08-05 11:52

@Don'tWorryBeHappy: 写过。执行通过了。但是最终输出的结果不对。我在看是不是我的问题

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-08 15:33
0

在linq to sql中,一些方法是不被识别的,一般有以下方法:

1.把参数提到外面先计算,例如:

var startDate = GetStartDate(…);

_re.GetEntities(x=>x.CreateDate>=startDate);

2.转化成能识别的操作

3.通过数据库函数

最后再指一下你写的问题,_re.GetEntities(x =>x.CreateDate.GetValueOrDefault().Date==x.CreateDate.GetValueOrDefault().Date )。x.CreateDate.GetValueOrDefault().Date==x.CreateDate.GetValueOrDefault().Date抛开其它不讲不是一直是true吗

 

jello chen | 园豆:7336 (大侠五级) | 2016-08-04 22:06

我就是想试下是否能通过。可惜不行。参数无法提到外面,因为我获取的是全部。我尝试用了sqlfunction也不行。

就是报这个错不识别方法“System.DateTime ToDateTime(System.String)”,因此该方法无法转换为存储表达式。

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-05 10:54

@程序员一号: 全部指的是?关于function的详细使用,建议搜索linq to sql function

支持(0) 反对(0) jello chen | 园豆:7336 (大侠五级) | 2016-08-05 20:16

@jello chen: 数据表里面的全部数据。好的。谢谢

支持(0) 反对(0) 程序员一号 | 园豆:2 (初学一级) | 2016-08-08 15:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册