LINQ单记录表单或默认情况下如果没有记录

Pet*_*teT 3 c# linq

我是LINQ的新手,到目前为止我很喜欢它,但是我试图通过请求单个记录(学生)来加载某些形式.如果这不存在我想要默认值,即空字符串假bool ...

所以我用过:

db = new DataClassesDataContext();        
student = db.ss_students.SingleOrDefault(p => p.student_id == studentID);
txtRegNumber.EditValue = student.car_reg_no;
Run Code Online (Sandbox Code Playgroud)

这在student.car_reg_no的分配上失败了.我意识到我似乎误解了SingleOrDefault方法,如果找不到记录,它实际上会为学生返回null.我出于某种原因认为它会返回每个字段的默认值,例如student.car_reg_no.我想我仍然在数据库模式下思考.

这不是我可以做这样的代码的问题:

db = new DataClassesDataContext();        
student = db.ss_students.SingleOrDefault(p => p.student_id == studentID);
if (student != null) 
{
        txtRegNumber.Text = student.car_reg_no;
        //assign more control values
}
Run Code Online (Sandbox Code Playgroud)

默认值可以分配给else中的控件,也可以直接分配给表单.

但这是正确的做法还是我错过了什么?

编辑 感谢帖子到目前为止我已经开始采用Marc Gravell建议的方法.我现在有点进一步了.

我现在正在尝试将数据保存回数据库,如果我正在更新或插入记录,我将如何知道.我应该添加bool来记录这个或者是他们的内置方式.

Mar*_*ell 9

SingleOrDefault返回返回类型默认值.这是

  • 对于classes/interfaces/delegates为null
  • 0/false表示值类型
    • 除了Nullable<T>,它是null

对于类,你得到null - 这主要是一种检查"它存在吗?"的方法.只是自己创建实际的默认值...也许:

YourType x = query.SingleOrDefault() ?? new YourType();
Run Code Online (Sandbox Code Playgroud)

new ...如果左侧为空,则此"空合并"方法仅执行右侧().或者更简单:

YourType x = query.SingleOrDefault();
if(x==null) { // use a default
    x = new YourType();
}
Run Code Online (Sandbox Code Playgroud)