我是LINQ的新手并且我很喜欢它,但是我试图通过请求单个记录(学生)来加载某些形式。如果这不存在,我想要默认值,即空字符串false bools ...
所以我用过:
db = new DataClassesDataContext();
student = db.ss_students.SingleOrDefault(p => p.student_id == studentID);
txtRegNumber.EditValue = student.car_reg_no;
这对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
}
默认值可以分配给else中的控件,也可以直接分配给表单。
但这是正确的做法还是我错过了什么?
修改 感谢帖子到目前为止我已经开始采用Marc Gravell建议的方法。我现在有点进一步了。
我现在正在尝试将数据保存回数据库,我如何知道我是在更新还是插入记录。我应该添加bool来记录这个或者是他们的内置方式。
答案 0 :(得分:9)
SingleOrDefault返回返回类型的默认值。这是
Nullable<T>
,其中为空对于类,你得到null - 这主要是一种检查“它存在吗?”的方法。只需自己创建实际默认值......也许:
YourType x = query.SingleOrDefault() ?? new YourType();
如果左侧为空,则此“空合并”方法仅执行右侧(new ...
)。或者更简单:
YourType x = query.SingleOrDefault();
if(x==null) { // use a default
x = new YourType();
}