gpt4 book ai didi

c# - Linq 和 DBNull - 出现错误

转载 作者:太空狗 更新时间:2023-10-29 20:47:03 28 4
gpt4 key购买 nike

从 rows.AsEnumerable() 中选择时出现错误。我正在使用以下代码...

var rows = ds.Tables[0].AsEnumerable();
trafficData = rows.Select(row => new tdDataDC
{
CalculationCount = row.Field<Int64>("biCalculationCountSeqID")
, Zone = row.Field<Int16>("siFkZoneId")
, Miles = row.Field<decimal>("dcMiles")
, Plaza = row.Field<Int16>("siFkPlazaId")
, VehicleCount = row.Field<int>("iVehicleCount")


});

大多数时候它运行良好,但是当数据库中有 NULLS 时,我收到此错误“无法将 DBNull.Value 转换为类型‘System.Int16’。请使用可空类型。”我该如何纠正这个问题?我不希望我的数据契约(Contract)具有 Nullable 类型,我想使用三元或其他类型,如果值为 NULL,则只使用 0。这可能吗?

感谢您的帮助,
~ck

最佳答案

你总是可以添加另一个扩展方法(未经测试):

   public static T FieldOrDefault<T>(this DataRow row, string columnName)
{
return row.IsNull(columnName) ? default(T) : row.Field<T>(columnName);
}

然后你的调用点看起来像:

var rows = ds.Tables[0].AsEnumerable();
trafficData = rows.Select(row => new tdDataDC
{
CalculationCount = row.FieldOrDefault<Int64>("biCalculationCountSeqID")
, Zone = row.FieldOrDefault<Int16>("siFkZoneId")
, Miles = row.FieldOrDefault<decimal>("dcMiles")
, Plaza = row.FieldOrDefault<Int16>("siFkPlazaId")
, VehicleCount = row.FieldOrDefault<int>("iVehicleCount")


});

关于c# - Linq 和 DBNull - 出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3145443/

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