Сделайте шаг назад и думать об этой проблеме. Вам нужна коллекция виджетов, где был заказан виджет, или был отправлен виджет, или виджет был обработан.
Есть четыре возможных состояния для познания «заказал»:
- этот виджет был заказан , и я знаю, что (правда)
- этот виджет был не заказывали , и я знаю, что (ложь)
- этот виджет был заказан , но я не знаю, что (нуль)
- этот виджет был не заказывали , но я не знаю, что (null)
Существует четыре состояния, но возможны только три значения. Поэтому, если «упорядоченное» находится в нулевом состоянии , вы не знаете, должно ли оно быть включено в результаты запроса или нет.
Компилятор тоже этого не знает.
Существует недостаточно информации для компилятора, чтобы предоставить вам запрос с семантикой, которую вы хотите. Компилятор не собирается догадываться и, возможно, дает вам плохие результаты; компилятор скажет вам, что здесь недостаточно информации, и вам нужно сделать больше работы, чтобы сделать запрос однозначным.
Что вам нужно сделать, это сказать что делать в случае, если вы не знаете ответа. Запрос «всех виджетов, которые были заказаны, отправлены или обработаны», невозможно, потому что некоторые виджеты мы не знаем, были ли они заказаны, отправлены или обработаны, и поэтому мы не знаем, включать их или нет.Но запрос «все виджеты , что я знаю было приказано, или , что я знаю были отправлены, или , что я знаю были обработаны» запрос, который компилятор может иметь смысл:
where (tf.Shipped ?? false) || (tf.Ordered ?? false) || (tf.Processed ?? false)
Это означает «если я не знаю, было ли отправлено и т. Д., Предположим, что это не так».
Вместо этого вы могли бы хотеть запрос «все виджеты, которые определенно были, или, возможно, были отправлены, упорядоченный или переработанном:
where (tf.Shipped ?? true) || (tf.Ordered ?? true) || (tf.Processed ?? true)
компилятор не будет угадать, с какой стороны вы хотите ошибочно, когда недостаточно информации для получения точных результатов, компилятор может ошибаться, и мы не принимаем решения от вашего имени. Вам нужно будет принять это решение.
В чем смысл нулевого значения Boolean? Серьезный вопрос. – DoctorMick
@DoctorMick Тонны использования. Скажем, у меня есть форма оценки состояния здоровья, которая спрашивает, прошел ли у пациента осмотр простаты. Это не касается женщин. Это не «истина» или «ложь». Это «null» - для N/A в этом случае. – Yuck
@DoctorMick или просто True/False/Неизвестно. – adelphus