【发布时间】:2011-06-23 12:12:44
【问题描述】:
有人可以指出为什么会发生这种情况:
我正在使用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 个元素,因为它应该可以工作。
这里是第一个和第二个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 时会发生这种情况?这是一个错误还是我做错了什么?
谢谢。
【问题讨论】:
-
这很可能与 NHibernate 处理它从 lambda 创建的表达式的方式有关,尽管天知道它在做什么......
标签: c# linq nhibernate lambda iqueryable