无法将对象从DBNull强制转换为其他类型的Linq

时间:2018-07-12 22:21:17

标签: c# linq datatable enumerable

我面临错误无法将对象从DBNull强制转换为其他类型。

即使遇到相同的DBNull错误,我也尝试输入null值。如何处理此错误?

List<string> List = new List<string>();
 List = (from r in Dt.AsEnumerable()
                                 orderby Convert.ToDateTime(r["StartDate"]) descending
                                                select r["name"] + string.Empty).ToList();

2 个答案:

答案 0 :(得分:2)

由于您正在处理LINQ-to-Objects,因此可以使用自己的自定义转换,也许像这样:

static DateTime? CustomParseDateTime(object value) {
    if(value == null || value is DBNull) return null;
    return Convert.ToDateTime(value);
}

orderby CustomParseDateTime(r["StartDate"])

答案 1 :(得分:-1)

没问题。以下代码将解决您的问题,不需要任何其他方法,并且与Mark Gravell的解决方案不同,它可以处理r [“ name”]。

var list = new List<string>();
list = (from r in Dt.AsEnumerable()
    orderby Convert.ToDateTime(r["StartDate"] == DBNull.Value ? "1/1/1" : r["StartDate"].ToString()) descending
    select (r["name"] == DBNull.Value ? string.Empty : r["name"].ToString())).ToList();

1/1/0001是DateTime的默认值。因此,如果r [“ StartDate”] == DBNull.Value,则表达式的计算结果将与“ new DateTime()”相同。

祝你好运!