实体框架null引用异常

时间:2018-02-15 08:53:36

标签: vb.net entity-framework nullreferenceexception

我看到了其他类似的问题,但我无法应用其他解决方案。

以下是代码

Dim da1 As DateTime = DateTime.ParseExact(Date.Today, "dd/MM/yyyy", CultureInfo.InvariantCulture)
Dim dataQuery As String = da1.ToString("dd-MM-yyyy", CultureInfo.InvariantCulture).PadLeft(10)
Dim errori = db.TRANSAZERROR.Where(Function(t) t.DATA.PadLeft(10) = dataQuery)

transazerror.datanullable varchar字段(是的,它不是日期时间),它还包含一个时间,所以我使用padleft只获取日期格式dd-MM-yyyy。

我想要的是选择所有包含data=today的记录,以便errori var应该是记录列表,但上面的代码返回

  

Nullreferenceexception

我不知道为什么。

我使用EF 6。

感谢您的提示!

例外细节:

System.NullReferenceException was unhandled
  HResult=-2147467261
  Message=Riferimento a un oggetto non impostato su un'istanza di oggetto.
  Source=transazErrorLog
  StackTrace:
       in transazErrorLog.Form1.log() in I:\Documenti\Vs15_Projects\transazErrorLog\transazErrorLog\Form1.vb:riga 22
       in transazErrorLog.Form1.Form1_Load(Object sender, EventArgs e) in I:\Documenti\Vs15_Projects\transazErrorLog\transazErrorLog\Form1.vb:riga 9
       in System.EventHandler.Invoke(Object sender, EventArgs e)
       in System.Windows.Forms.Form.OnLoad(EventArgs e)
       in System.Windows.Forms.Form.OnCreateControl()
       in System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
       in System.Windows.Forms.Control.CreateControl()
       in System.Windows.Forms.Control.WmShowWindow(Message& m)
       in System.Windows.Forms.Control.WndProc(Message& m)
       in System.Windows.Forms.Form.WmShowWindow(Message& m)
       in System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
  InnerException: 

修改 我试图使用db的另一个字段,它的日期字段设置为nullable = false,即使这样我得到了nullreference异常...... 我转过头来问:如何使用实体框架获取记录列表?

2 个答案:

答案 0 :(得分:1)

您可以先在transazerror.data语句中检查where是否为空。

您可以使用String.IsNullOrEmpty方法

喜欢这个

Not String.IsNullOrEmpty(t.DATA) AND t.DATA.PadLeft(10) = dataQuery

答案 1 :(得分:0)

由于您说if可以为空,因此假设您在其中一个记录中有空值。现在当你尝试在NULL上执行PadLeft时,它会抛出你的错误。

我可以建议的解决方案是在LINQ查询中执行PadLeft之前,先检查TEST_CASE是否为空,如果不执行PadLeft。