繁体   English   中英

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

[英]C# function to cast multiple datarow values as null if dbnull is detected

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

如果DataTable列强制转换为字符串,这不是问题。 但是,当将其强制转换为小数时,我收到错误消息,指出小数不能为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;
};

现在要确保我的数据行可以处理Null,我可以将其设置为可为空,但这不是必需的。

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

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

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

现在,我必须在设计的每个表中执行大约50个if语句检查。 我可以将其传递给函数吗?

您可以将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 
    };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM