0
private void btnUpdate_Click(object sender, EventArgs e)
{
    using (testEntities Setupctx = new testEntities())
    {

        var toBeUpdatedStart = txtStart.Text;
        var toBeUpdatedStop = txtStop.Text;
        shifthour updateShiftStart;
        shifthour updateShiftStop;
        updateShiftStart = Setupctx.shifthours.FirstOrDefault(u => u.shiftTiming_start == toBeUpdatedStart);
        updateShiftStop = Setupctx.shifthours.FirstOrDefault(p => p.shiftTiming_stop == toBeUpdatedStop);
        updateShiftStart.shiftTiming_start = txtStart.Text;  <-- error prompt here
        updateShiftStop.shiftTiming_stop = txtStop.Text;
        Setupctx.SaveChanges();
        txtStart.Text = "";
        txtStop.Text = "";
        MessageBox.Show("Shift Timing Has Been Updated.");
    }
}

嗨,有人知道这段代码有什么问题吗?更多信息:这是为员工编辑轮班时间。当我输入新的开始和停止时间时,错误提示出来并说“对象引用未设置为对象的实例”。

4

4 回答 4

1

updateShiftStart是 null 这就是你得到这个异常的原因。由于您正在使用FirstOrDefault它将返回第一个结果或 null 如果没有找到,并且您的搜索没有返回任何内容,这就是为什么 updateShiftStart 被分配为 null 因此异常。您可以在使用该值之前进行检查。

if(updateShiftStart != null)
  {
    updateShiftStart.shiftTiming_start = txtStart.Text;
  }

你的比较,(u => u.shiftTiming_start == toBeUpdatedStart);大概是。由于您正在比较字符串,您可以使用

updateShiftStart = Setupctx.shifthours.FirstOrDefault(u => u.shiftTiming_start.Equals(toBeUpdatedStart));

您可以StringComparison.InvariantCultureIgnoreCase在 Equals 中使用忽略大小写

于 2012-07-11T06:00:45.063 回答
0

变量 updateShiftStart 和 updateShiftStop 使用使用 FirstOrDefault() 的查询设置,这可能导致 NULL 引用。

于 2012-07-11T06:02:26.167 回答
0

updateShiftStart为空,表示该行

 updateShiftStart = Setupctx.shifthours.FirstOrDefault(u => u.shiftTiming_start == toBeUpdatedStart);

无法返回对象。FirstOrDefault将找到它可以找到的第一个项目,或者为空。如果您的代码绝对要求updateShiftStart不为空,则应在操作后检查,或First改用。

于 2012-07-11T06:03:11.957 回答
0

private void btnUpdate_Click(object sender, EventArgs e) { using (testEntities Setupctx = new testEntities()) { int ID = Int32.Parse(lblID.Text); var SHquery = (from sh in Setupctx.shifthours where sh.idShiftHours == ID select sh).First();

                SHquery.shiftTiming_start = txtStart.Text;
                SHquery.shiftTiming_stop = txtStop.Text;
                Setupctx.SaveChanges();
                txtStart.Text = "";
                txtStop.Text = "";
                this.Edit_Shift_Hours_Load(null, EventArgs.Empty);
                MessageBox.Show("Shift Timing Has Been Updated.");
        }
    }
于 2012-07-17T01:48:23.690 回答