不能将 Null 值赋给类型为 System.Int32 (不可为 null 的值类型)的成员。

romanchaos 2014-01-14 09:35:50

from p in Sys_operators
where p.Id == 5
select new
{
Region = new { Id = p.Regions.Id, Label = p.Regions.Rname },
Wid = p.Warehouse.Id,
Curr = new { Id = p.Curr.Id, Ccode = p.Curr.Ccode }
}

以上linq会报标题所示的异常,表Sys_operators和其他三张表(Regions,Warehouse,Curr)建立了主外键关系,是不是有可能外表为null所以不能这样select出其中的属性?
...全文
1019 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Wid = p.WarehouseId==null?0:p.WarehouseId
romanchaos 2014-01-14
  • 打赏
  • 举报
回复
引用 6 楼 KarasCanvas 的回复:
没看明白楼主要表达啥,反正匿名类型的尿性类型是靠表达式推导出来的
例如这一句:Wid = p.Warehouse.Id,匿名类推导出的是int类型,因为它是仓库表的主键Id,但由于p.Warehouse可能为null所以这里就报错了,因此改为Wid = p.WarehouseId(外键)就可以通过。
种草德鲁伊 2014-01-14
  • 打赏
  • 举报
回复
没看明白楼主要表达啥,反正匿名类型的尿性类型是靠表达式推导出来的
romanchaos 2014-01-14
  • 打赏
  • 举报
回复
引用 4 楼 KarasCanvas 的回复:
var xxx = (int?)null;
现在不是(int?)null这一个问题,而是var xxx为int,解决方法就是:

from p in Sys_operators
   where p.Id == 5
   select new
   {
       Region = new { Id = p.RegionsId, Label = p.Regions.Rname },
       Wid = p.WarehouseId,
       Curr = new { Id = p.CurrId, Ccode = p.Curr.Ccode }
   }
种草德鲁伊 2014-01-14
  • 打赏
  • 举报
回复
var xxx = (int?)null;
romanchaos 2014-01-14
  • 打赏
  • 举报
回复
如果表中字段可为空,那么linq这里的字段就会为int?,不过看来点外表的字段没有这么智能……
romanchaos 2014-01-14
  • 打赏
  • 举报
回复
因为是匿名类,我还以为会自动辨识为int?呢……
拉文麦克 2014-01-14
  • 打赏
  • 举报
回复
看错误就知道了,int型默认只能为0

8,497

社区成员

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

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