Объект не может быть преобразован из DBNull в другие типы Linq

Я столкнулся с ошибкой. Объект не может быть преобразован из DBNull в другие типы.

Я пытался ввести нулевые значения, хотя получаю ту же ошибку DBNull. Как справиться с этой ошибкой?

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

person Shakeer Hussain    schedule 12.07.2018    source источник


Ответы (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"])
person Marc Gravell    schedule 12.07.2018
comment
Спасибо. Как вы думаете, ошибка возникает из-за проблемы с startDate? - person Shakeer Hussain; 13.07.2018
comment
@ShakeerHussain определяет проблемы? если некоторые из них не имеют определенных значений, то... конечно? - person Marc Gravell; 13.07.2018
comment
Имя имеет нулевое значение, этот код не удаляет нулевые значения * где r[name].ToString() != && r[name] != DBNull.Value - person Shakeer Hussain; 13.07.2018

Без проблем. Следующий код решит вашу проблему, не требует дополнительных методов и, в отличие от решения Марка Гравелла, обрабатывает 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();

01.01.0001 — это значение по умолчанию для DateTime. Таким образом, если r["StartDate"] == DBNull.Value, выражение оценивается как то же значение, что и "new DateTime()".

Удачи!

person Pancake    schedule 12.07.2018
comment
объединение работает только с истинным null - OP явно упоминает DBNull в вопросе; объединение не поможет с DBNull значениями - person Marc Gravell; 13.07.2018