使用linq查询sql表中不存在的记录时,收到以下错误System.NullReferenceException:'对象引用未设置为对象的示例,但如果.FirstOrDefault()在数据库中找不到任何内容,则不应对其进行处理,是否设置默认值?
我想要做的是,如果数据库中不存在某个记录,则向用户给予一条消息以指明这一点,但如果该记录存在,则希望它提供信息
- 我创建了一个示例,以免附加所有代码并表达我的失败 *
我的主窗体代码
namespace Fallas
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void numerofactura_Leave(object sender, EventArgs e)
{
var bill = Bill.billfromid (billnumber.Text);
numerofactura.Text = bill.Numero;
nombrecliente.Text = bill.Cliente;
}
我的类代码
namespace Fallas
{
public class BillModel
{
public string Number { get; set; }
public string Customer { get; set; }
public decimal Subtotal { get; set; }
public decimal Total { get; set; }
}
public static class Bill
{
public static BillModel billfromid(string number)
{
using AppDatabase db = new AppDatabase();
{
Bill fct= (from u in db.vta_factura
where u.Numero == number
select u).FirstOrDefault();
if (fct.Factura_ID == 0)
{
MessageBox.Show("Bill not found!", "Atencion!", MessageBoxButtons.OK, MessageBoxIcon.Information);
return new Bill();
}
return fct;
}
}
}
}
2条答案
按热度按时间ibps3vxo1#
从这一行开始:
当行结束时,如果没有匹配的记录存在,
fct
变量将被设置为null
(任何类的默认值,根据“.FirstOrDefault()
“的“或默认”部分)。您无法查找
null
变量的Factura_ID
属性(或任何其他属性),因此我们会得到NullReferenceException。您可能希望改为执行以下操作:
或者这个:
is object
是现代C#中一种相对较新的检查空值的模式。它被认为是高效的,有助于简化可空/值类型的一些边缘情况的代码,并以积极的方式(没有否定)表达它。*或者,您也可以只返回此方法的结果,而不进行检查,并让更高级别的调用代码决定最佳的响应方式。这样,此方法在MessageBox不合适的上下文中也会很有用。
vmjh9lq92#
.FirstOrDefault();
将返回null(如果未找到记录