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

时间:2009-07-28 08:46:05

标签: c# linq

我是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来记录这个或者是他们的内置方式。

1 个答案:

答案 0 :(得分:9)

SingleOrDefault返回返回类型的默认值。这是

  • null for classes / interfaces / delegates
  • 0 / false表示值类型
    • 除了Nullable<T>,其中为空

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

YourType x = query.SingleOrDefault() ?? new YourType();

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

YourType x = query.SingleOrDefault();
if(x==null) { // use a default
    x = new YourType();
}