Yip*_*Yay 8 c# linq nhibernate lambda iqueryable
有人可以指出为什么会发生这种情况:
我正在使用它NHibernate和Linq它的提供者.
此处列出了失败的代码:
var sequence = session.Query<T>();
var wtfSequence = sequence.Where(x => true);
var okaySequence = sequence.Where(x => x.Id > 0);
Run Code Online (Sandbox Code Playgroud)
调试显示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)]
Run Code Online (Sandbox Code Playgroud)
现在,如果我用my测试相同的代码InMemoryRepository,它将每个实体存储在一个简单的列表中,那么这个(x => true)工作绝对可以.
那么 - 为什么在使用时会发生这种情况NHibernate?这是一个错误还是我做错了什么?
谢谢.
我不知道NHibernate,但问题从生成的SQL中显而易见:您的数据库不认为true(小写t)等于True(大写T).在SQL Server中,您可以通过修改数据库排序规则来更改此设置(除非您因其他原因需要不区分大小写,否则这是一个非常糟糕的主意).
我猜这是你需要解决的NHibernate中的一个错误.测试t => 1 == 1而不是t => true,这取决于NHibernate代码的编写方式.
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |