Не удается неявно преобразовать тип 'bool?' «bool» в запросе LinQ?

1

Мое утверждение where явно не работает, но все, что я могу найти, это примеры того, как преобразовать его за пределы запроса LinQ. Самое близкое, что я могу прийти, это:

&& rdoNoPhone.Checked ? d.PHONE!= null : true

Но я не совсем уверен, как это работает в моем случае. Я понимаю, что мое поле SQL под названием Active позволяет 3 значения, истины, false и null, и я предполагаю, что мой ответ - все в этом маленьком вопросительном знаке.

LinQtoSQLDataContext db = new LinQtoSQLDataContext();
                   var query = from a in db.Admins
                               where a.Active = true
                               orderby a.Name
                               select new { a.Name, a.LoginName};

Я также должен спросить, как можно использовать инструкцию SQL IN в запросе LinQ. Например, изменив следующее в LinQ:

Select Field1, Field2, Level
From Table
Where Level IN (1,2,5)
  • 2
    На оба вопроса уже был дан ответ. Вы ищете nullableBool.HasValue && nullableBool.Value == true и для вашего второго вопроса new[] {1, 2, 5}.Contains(value) .
  • 1
    where a.Active = true : вы уверены, что не имели в виду == ?
Показать ещё 3 комментария
Теги:
linq
boolean

1 ответ

4
Лучший ответ

Я считаю, что ваш знак равенства в строке, where a.Active = true должен фактически быть двумя равными знаками (означать сравнение, а не назначение). На самом деле, поскольку вы сравниваете bool с true, вам даже не нужен оператор сравнения. Вы можете просто написать a.Active.Value.

LinQtoSQLDataContext db = new LinQtoSQLDataContext();
                   var query = from a in db.Admins
                               where a.Active.HasValue && a.Active.Value
                               orderby a.Name
                               select new { a.Name, a.LoginName};

Для вашего второго вопроса вы можете использовать Contains(value) для решения этой проблемы. Например:

int[] Levels = new int[] { 1, 2, 5 };
int Level = 2;
if (Levels.Contains(Level))
{
    // Level was found in Levels
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню