Я пытаюсь прочитать значения, допускающие значение NULL, из базы данных. Прямо сейчас мой код преобразует нулевые значения в ложные. Как я могу изменить свой код, чтобы разрешить нулевые значения?
Ap1ExamTaken = dr["AP1_ExamTaken"] != DBNull.Value && Convert.ToBoolean(dr["AP1_ExamTaken"]),
Я хотел бы, чтобы значения, которые равны нулю, отображались как нулевые, а не ложные.
это тип bool?
Вы говорите, что хотите показать значение, но во фрагменте кода я не вижу ничего, что бы его показывало. Есть только задание.
В основном, если значение db равно null, я хочу, чтобы Ap1ExamTaken был равен нулю, в противном случае он будет равен true/false.
Ap1ExamTaken = dr.Field<bool?>("AP1_ExamTaken")?
@JeroenMostert: Это если предположить, что dr — это DataRow? Я предполагал SqlDataReader или что-то подобное.
@JonSkeet: это действительно так; сила привычки видеть именно такой код много-много раз. (Во всяком случае, больше, чем для считывателя данных.)





Здесь вы можете использовать условный оператор, чтобы установить значение null, если значение равно DBNull.Value, или значение, не допускающее значение NULL, в противном случае:
Ap1ExamTaken = dr["AP1_ExamTaken"] == DBNull.Value ? null : (bool?) dr["AP1_ExamTaken"];
Обратите внимание, что это вызовет исключение, если dr["AP1_ExamTaken"] является нелогическим типом, отличным от DBNull, который я подозревать - это то, что вам нужно.
Вы мог записываете это более компактно как:
Ap1ExamTaken = dr["AP1_ExamTaken"] as bool?
... но тогда вы получите нулевое значение, если значение имеет какой-то другой тип (строка, целое число и т. д.), о котором я обычно беспокоюсь. (Если мои данные не имеют той формы, которую я ожидаю, я хочу знать об этом как можно скорее.)
Что такое тип
Ap1ExamTaken?