C# с помощью LINQ и булевской переменной Nullable

Я имею ниже запроса linq, который берет текстовое поле, которое может быть Y, N или DBnull и заполняет булевскую переменную? параметр или с Правда, Ложь или с пустой указатель в зависимости от значения поля.

var dset = from i in tbdc.Talkbacks
       where i.talkback_id == id
       select new Talkback(
               i.talkback_id, i.acad_period, i.reference,
               i.staff_member, i.date_received, i.no_talkers,
               i.gender_id, i.names, i.type_id,
               i.method_id, i.area_id, i.site_id,
               i.category_id, i.date_closed, i.expenddate,
               i.acknowledgementtarget,
               (i.targetmet == "Y") ? true : 
                   ((i.targetmet == "N") ? false : null),
                   (i.acknowledgementtargetmet != "N") ? true : false

Проблематичная строка

(i.targetmet == "Y") ? true : ((i.targetmet == "N") ? false : null)

После чтения я нашел некоторую документацию, которая указывает что 2-е и 3-и аргументы встроенного если потребность иметь тот же тип или быть неявно конвертируемой друг другу.

Мой вопрос, как я обхожу это ограничение для достижения моего желаемого результата?

Я относительно плохо знаком с C#, так еще не знакомо со всеми его причудами/возможностями.

7
задан Uwe Keim 9 October 2013 в 05:25
поделиться

2 ответа

Я предлагаю заменить его на:

(i.targetmet != null) ? (bool?)(i.targetmet == "Y") : null;

Причина, по которой компилятор не соглашается без приведения, заключается в том, что даже если вы сохраните его в структуру, допускающую значение NULL, тернарная операция проверяет совместимость результатов посредством неявного преобразования.

Результаты true и false обрабатываются как литералы bool , а не bool? , поэтому не могут неявно преобразовываться в null . Преобразование любого из результатов в bool? сделает их сопоставимыми. В предложенном мной есть неявное преобразование между bool? и null , и это тоже работает:

(i.targetmet != null) ? (i.targetmet == "Y") : (bool?)null;

Это неявное преобразование между bool и bool? . Я произвольно предпочитаю первый ..

6
ответ дан 7 December 2019 в 05:17
поделиться

Вы можете явно преобразовать одно или несколько выражений в bool? :

(i.targetmet == "Y") ? true : ((i.targetmet == "N") ? (bool?)false : (bool?)null)
2
ответ дан 7 December 2019 в 05:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: