如果检测到dbnull,则使用C#函数将多个数据行值强制转换为null

本文关键字:数据 null 转换 dbnull 检测 函数 如果 | 更新日期: 2023-09-27 18:19:28

我的Linq to SQL程序从我的SQL Server数据库中返回了相当多的值,其中一些值可以为null,而另一些则不为null。

如果DataTable列被强制转换为字符串,则这不是问题。然而,当它被强制转换为decimal时,我会收到错误消息,说明decimal不能为null。

我需要了解的是如何在保持代码整洁的同时有效地处理这些问题。

// Create DataTable
DataTable dt = new DataTable();
dt.Columns.add("Deal", typeof(string));
dt.Columns.add("Price", typeof(decimal) ?? typeof(DBNull));
// Create Linq Query
var query =
    from quer in table 
    select new  
    {
        quer.deal_id,
        quer.price 
    };

在这里,我在插入表之前创建数据行:

var datarows = query.Select(r =>
{
    var row = dt.NewRow();
    row["Deal"] = r.deal_id;
    row["Price"] = r.price;
};

现在,为了确保我的数据行可以处理Nulls,我可以将其设置为可为null,但这不是必须的。

dt.Columns.add("Deal", typeof(string?));

但对于十进制字段,我必须这样做:

if (r.price == DBNull.Value)
{
    row["Price"] = null;
}

现在,对于我正在设计的每个表,我必须进行大约50次if语句检查。我可以把它传给一个函数来做吗?

如果检测到dbnull,则使用C#函数将多个数据行值强制转换为null

您可以将DataColumn设置为接受DBNull值:

// Create DataTable
DataTable dt = new DataTable();
dt.Columns.add(new DataColumn( "Deal", typeof(string));
dt.Columns.add(new DataColumn( "Price", typeof(decimal)){AllowDBNull = true});
// Create Linq Query
var query =
    from quer in table 
    select new  
    {
        quer.deal_id,
        quer.price 
    };