我看到了其他类似的问题,但我无法应用其他解决方案。
以下是代码
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.data
是nullable
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异常...... 我转过头来问:如何使用实体框架获取记录列表?
答案 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。