DotConnect неэффективное логическое сравнение генерации SQL

Один из моих объектов имеет логическое свойство. Один из запросов linq фильтрует это свойство.

context.Items.Where(one => one.BoolProperty == true)

Когда я смотрю на сгенерированный код SQL, запрос переводится в

... WHERE "Extend1".BOOL_PROPERTY <> 0

Очевидно, что это проблема, так как база данных не берет индекс, а осуществляет полный доступ к таблице.

Мы используем .Net 4.6, Entity Framework 6, DevArt 8.5 и Oracle 12. Логическое поле в Oracle — это число (1,0).


person StefanG    schedule 06.12.2016    source источник
comment
В этом случае подойдет Bitmap Index. Однако индексы Bitmap не всегда подходят. см. раздел Растровый индекс и индекс B-дерева: какой и когда?. Вы пробовали Where(one => one.BoolProperty != false)?   -  person Wernfried Domscheit    schedule 06.12.2016


Ответы (1)


Пожалуйста, установите следующую опцию в вашем коде:

config.QueryOptions.TrueValueNumber = TrueValueNumber.One;

Для получения дополнительной информации см. https://www.devart.com/dotconnect/oracle/docs/?QueryOptions.html .

person Devart    schedule 08.12.2016
comment
Вау, я был уверен, что есть параметр конфигурации, чтобы переопределить это поведение! Но я бы никогда не догадался, что это TrueValueNumber. Спасибо - person StefanG; 09.12.2016