linq 时间问题

starsix33 2012-07-10 11:28:00

var info = from gi in db.GoodInfos
Join od in db.OrderDetailses on gi.GoodID equals od.GoodID into odJoin
from a in odJoin.DefaultIfEmpty()
where DateTime.Now.CompareTo(gi.InstoreTime) > 180
select new
{
gi.ReceiveTime,
gi.GoodID,
gi.GoodName,
gi.Location,
gi.BarCode,
gi.InstoreTime,
gi.GoodState,
a.IsOutScan

};

info = info.Where(id => id.GoodState == 32 && id.IsOutScan == 0);

info = info.OrderBy(id => id.GoodID);



var resaultDate = info.Skip((PageIndex - 1) * RowsCount).Take(RowsCount).ToList();


为什么在运行到var resaultDate = info.Skip((PageIndex - 1) * RowsCount).Take(RowsCount).ToList();
时会报错:“无法将类型“System.Nullable`1”强制转换为类型“System.Object”。LINQ to Entities 仅支持强制转换 Entity Data Model 基元类型。”

...全文
403 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kay002 2013-11-19
  • 打赏
  • 举报
回复
gi.InstoreTime.HasValue 获取bool,指定当前的System.Nullable<T>对象是否有值
EnForGrass 2012-07-10
  • 打赏
  • 举报
回复
info.Skip((PageIndex - 1) * RowsCount).Take(RowsCount)这句查出来的数据正常吗?
wlf535944903 2012-07-10
  • 打赏
  • 举报
回复
我linq是菜鸟一枚
但可以帮你定位下错误~

你一步步试试



var info = from gi in db.GoodInfos
Join od in db.OrderDetailses on gi.GoodID equals od.GoodID into odJoin
from a in odJoin.DefaultIfEmpty()



执行到这 你就先 ToList() 一次 看看在这报错不

然后再加在 where 等 再 ToList()

然后再 各个位置

info = info.Where(id => id.GoodState == 32 && id.IsOutScan == 0);

info = info.OrderBy(id => id.GoodID);

都定位下 是哪错了



starsix33 2012-07-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

LINQ to Entities 有专门的函数进行比较,System.Data.Objects.EntityFunctions下

System.Data.Objects.EntityFunctions.DiffMinutes(DateTime.Now,gi.InstoreTime) < 0
[/Quote]
谢谢 ,问题解决了~~~
claymore1114 2012-07-10
  • 打赏
  • 举报
回复
LINQ to Entities 有专门的函数进行比较,System.Data.Objects.EntityFunctions下

System.Data.Objects.EntityFunctions.DiffMinutes(DateTime.Now,gi.InstoreTime) < 0
starsix33 2012-07-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 4 楼 的回复:

引用 1 楼 的回复:

我linq是菜鸟一枚
但可以帮你定位下错误~

你一步步试试
C# code



var info = from gi in db.GoodInfos
Join od in db.OrderDetailses on gi.GoodID equals od.GoodID into odJoin
from a in……
[/Quote]
不行,还是那个错误
EnForGrass 2012-07-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 1 楼 的回复:

我linq是菜鸟一枚
但可以帮你定位下错误~

你一步步试试
C# code



var info = from gi in db.GoodInfos
Join od in db.OrderDetailses on gi.GoodID equals od.GoodID into odJoin
from a in odJoin.Defau……
……
[/Quote]
CompareTo是比较DateTime类型的时间,注意时间格式和精度
where DateTime.Now.CompareTo(gi.InstoreTime) >0看看能查出吗?
暖枫无敌 2012-07-10
  • 打赏
  • 举报
回复
那是因为你的gi.InstoreTime是一个可空的DateTime类型,如果gi.InstoreTime是null值的话,就会报错的,你可以用三元运算符处理一下

DateTime.Now.CompareTo(gi.InstoreTime==null?"1999-1-1":gi.InstoreTime) > 180
starsix33 2012-07-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

我linq是菜鸟一枚
但可以帮你定位下错误~

你一步步试试
C# code



var info = from gi in db.GoodInfos
Join od in db.OrderDetailses on gi.GoodID equals od.GoodID into odJoin
from a in odJoin.Defau……
[/Quote]
是由于where DateTime.Now.CompareTo(gi.InstoreTime) > 180的问题
starsix33 2012-07-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

info.Skip((PageIndex - 1) * RowsCount).Take(RowsCount)这句查出来的数据正常吗?
[/Quote]

如果不加where DateTime.Now.CompareTo(gi.InstoreTime) > 180 就是正常的 可是加了这句就会报错

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧