先上图这是利用EF生成的SQL语句在数据库里面查询出来的数据。对应的Id的日期是22号这都对着。
但是在EF返回来的集合里面的数据确实如下:
同样Id对应日期往后推了一天。不知其解。
因为7.22号这条数据有几个价格列是空的。查出来就有问题。我把为空的那几个列设置一定的值确是对的。
希望碰到过此类问题的高手能给小弟分析一下。
这块这个SQL语句就是不加日期条件。也会出现此问题。
但是还有一个奇怪的问题。我这个id的第一条数据就是从今天7.22号开始的。如果我把7.23号的价格清空就不会出现此问题。
呵呵.我真不知道,有些人推崇EF的原因何在
(除了lamda/linq,我真找不出一个理由我用它)
1.不能很好支持其它数据库
2.多数据源问题麻烦
3.数据库变动不变 迁移不方便(到其他数据库)
4.性能可控性不高,实战性不强
我猜想 ,你获取结果后的循环是用来统计价格的吧 ? 因为图被遮盖了看不到
有两个方法可以解决
1.就是在循环判断中过滤价格为 Null的
2.就是在查询语句过滤掉
我是查询价格为空或者不为空的都要查。现在是有部分列为空的话。同样的Id对应的日期就不对了。第二天数据好着呢。而且日期也对应这第二条的ID
@江宁织造: 用一个纯sql让EF执行,看看结果ok不.不要计算后的sql
DAY在实体中定义的类型是什么?
时间的可空类型public DateTime? DAY{ get;set; }
@江宁织造: 出问题时你究竟用的是LINQ查询还是问题补充中的sql语句?
@dudu: 两种方式都产生此问题。还有就是我们另一个纯ADO.NET 的项目就对着。
@江宁织造: MARKET_PRICE, LOCAL_PRICE, GROUP_PRICE在实体中的类型是如何定义的?
@dudu:
@江宁织造: 不是数据库,是代码中的实体类
@dudu:
@江宁织造: 问题中的第一张图是Entity Framework实际生成的SQL语句吗?
@dudu: 是的。语句都没问题。就是返回来的集合里面的数据产生了问题。只根据ID查数据也会出现此问题。
@dudu: 问题好像真的是EF的某种机制造成的。我被迫用原生的ADO.NET对象就可以正确查出来。
@江宁织造: 感谢站长的回答。我的问题最终原因还并不是EF本身造成的,而是我使用有误造成的。最终的原是我EF的上下文那块出的问题。
endtime 為啥加 23:59:59 這個地方出問題了吧 你在這個地方 加了一天啊 所以結果出來是多了一天的結果
即便设置为00:00:00.000也出现同样的问题。
@江宁织造: 用一个纯sql让EF执行,看看结果ok不.不要计算后的sql
@江宁织造: 應該還是你程序中處理的時候 出問題了 你那段代碼 圖片太小看不清楚 程序在處理時間的時候有問題 你在好好查查看你程序 邏輯
@[秦时明月]: 不行,select ID,NJL_BOOK_ID,MARKET_PRICE,LOCAL_PRICE,GROUP_PRICE,DEPOSIT,DAY,DESCRIPTION,TYPE_CODE,COST_PRICE from NJL_ORDER_PRICE where NJL_BOOK_ID=@NJL_BOOK_ID
直接只id条件还是跟之前的一样。我给第一条执行update NJL_ORDER_PRICE set MARKET_PRICE='65.00',LOCAL_PRICE='62.00',GROUP_PRICE='59.00',DEPOSIT='' where id='FCDCEE1A-807D-4EF1-9324-D78903862D15'这个语句。它就可以正常查出来。价格列要是为空就会出现此问题。但是id和其他值都查对应这。就是日期这块老是往后了一天。
@江宁织造: 无语.就是讲:和时间无关?只要价格为NULL,就会出现跳行的问题
@[秦时明月]: 对的。但是还有一个奇怪的问题。我这个id的第一条数据就是从今天7.22号开始的。如果我把7.23号的价格清空就不会出现此问题。
@江宁织造: 重新建一个项目做测试,看看
@dylan2019: 看图片的时候在谷歌浏览器下可以右键在新标签页中打开图片。其他浏览器可以复制图片地址打开。
@[秦时明月]: 我试试。
@江宁织造: 加個排序看一下 我之前在做分頁的時候也遇到過這種情況 就是因為排序的問題導致的
@dylan2019: 排序?呵呵,必然不是.数据都出现问题了
@[秦时明月]: 问题好像真的是EF的某种机制造成的。我被迫用原生的ADO.NET对象就可以正确查出来。
@dylan2019: 问题好像真的是EF的某种机制造成的。我被迫用原生的ADO.NET对象就可以正确查出来。你们可以做给跟我这种需求类似的实验。
@江宁织造: 改为 public DateTime DAY{ get;set; } 试试
是单单这一条加一天,还是全部都加一天?
单单是这一条。其他的都好着。但是如果我第一条的那些价格字段不为空,但是第二条为空数据就正常读取出来。
@江宁织造: 那你试试 OrderByDesc 一下 把它放在最后一条,看看会不会还是加一天
@Yu: 问题好像真的是EF的某种机制造成的。我被迫用原生的ADO.NET对象就可以正确查出来。你们可以做一下实验。
@江宁织造: 不可能把 之前用過ef 沒有遇到這種情況啊 你排序根據某字段排序 試試看 與時間字段可為空 應該沒關係吧
@dylan2019: 感谢你们的回答。我的问题最终解决了。最终的原因并不是EF这种查询不行。而是我EF的上下文那块出的问题。
@Yu: 感谢你们的回答。我的问题最终解决了。最终的原因并不是EF这种查询不行。而是我EF的上下文那块出的问题。
同事找到问题的所在原因了。
????????????????????