2016-05-13 60 views
1

比较使用LINQ和实体框架时的奇怪之处。 我想从我的数据库中检索一个ID,并得到这个奇怪的消息。VB.NET LINQ方法语法不允许从'Integer?'进行隐式转换到'Integer'

我可以简单地修复它,你可以看到,但我想明白为什么会这样。

问题

为什么我得到即使我请与“的HasValue”或者我用“FirstOrDefault”此错误消息?在我看来,它不能为空,但我显然错过了一些东西。

Code and Error

+0

请粘贴在您的实际代码中。屏幕截图很难处理。 –

+0

即使**你**检查'HasValue','严格'政策并不在乎。你有没有尝试简单地将它投射到Integer? 'user.setID(DirectCast(cctUser.OPX_Rechte,Integer))'。既然你知道该属性有价值,它应该不是一个问题。 –

+0

是的,我可以简单地把它,但我不喜欢只是不明白为什么我不得不这样做。 –

回答

2

添加.Value如果你是100%肯定的Integer?有一个值。

为什么我得到即使我请与“的HasValue”

实体框架只是使用你给它的对象此错误消息。它不能创建OPX_不可为空的新对象。

+0

可以在10分钟内接受你的答案。谢谢你学到了什么。 –

2

setOpxRights函数大概需要一个Integer作为参数,而Option Strict On将不允许Integer?隐式转换为整数。如果你确定它总会有一个值,那么通过cctUser.OPX_Rechte.Value

1

编译器并不完美,我们可以看到OPX_Rechte会因为where语句而有一个值,但是对于编译器来说你是只使用一个有Integer的对象cctUser?它需要一个Integer。

相关问题