Может ли кто-нибудь указать, почему это может происходить:
Я использую NHibernate
и поставщика Linq
для него.
Код, который не работает, указан здесь:
var sequence = session.Query<T>();
var wtfSequence = sequence.Where(x => true);
var okaySequence = sequence.Where(x => x.Id > 0);
Отладка показывает, что sequence
(то есть IQueryable<T>
) после этого содержит 2 элемента, которые были добавлены в базу данных.
Я ожидаю, что первое Where
выражение выдаст все элементы из этой последовательности, но, к сожалению, оно оставляет 0 элементов.
(ПОЧЕМУ ???)
Второе утверждение Where
, напротив, фактически выдает 2 элемента, как и должно работать.
Вот NHibernate -> Sqlite
запросы для первого и второго Where
операторов.
NHibernate: select cast(count(*) as INTEGER) as col_0_0_ from "BinaryUnitProxy_IndicatorUnitDescriptor" binaryunit0_ where @p0='true';@p0 = 'True' [Type: String (0)]
NHibernate: select cast(count(*) as INTEGER) as col_0_0_ from "BinaryUnitProxy_IndicatorUnitDescriptor" binaryunit0_ where binaryunit0_.Id>@p0;@p0 = 0 [Type: Int32 (0)]
Теперь, если я протестирую тот же код с моим InMemoryRepository
, который хранит все сущности в простом списке, (x => true)
прекрасно работает.
Итак - почему это происходит при использовании NHibernate
?Это ошибка или я что-то не так делаю?
Спасибо.