有人能指出为什么会发生这种情况吗:
我正在使用 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
语句从该序列中产生所有元素,但不幸的是它没有产生任何元素。
(为什么???)
相反,第二个Where
语句实际上产生了应该工作的2个元素。
这里是第一个和第二个Where
语句的NHibernate -> Sqlite
查询。
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
时会出现这种情况?这是一个错误还是我做错了什么?
谢谢。