可能有人指出,这可能是为什么发生的事情:C#奇怪拉姆达行为
我使用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个元素。
(WHY ???)
第二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)
工作absolutelty罚款。
所以 - 为什么在使用NHibernate
时会发生这种情况?这是一个错误还是我做错了什么?
谢谢。
这很可能与NHibernate处理它从lambda创建的Expression的方式有关,尽管善良知道它在做什么...... – Massif 2011-02-08 15:04:56