gpt4 book ai didi

c# - LINQ 单条记录形式或如果没有记录则默认

转载 作者:行者123 更新时间:2023-11-30 13:52:55 28 4
gpt4 key购买 nike

我是 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 建议的方法。我现在更进一步了。

我现在正在尝试将数据保存回数据库,我怎么知道我是在更新还是插入记录。我应该自己添加 bools 来记录这个还是他们的内置方式。

最佳答案

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

  • 类/接口(interface)/委托(delegate)为空
  • 值类型为 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();
}

关于c# - LINQ 单条记录形式或如果没有记录则默认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1192762/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com