Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#奇怪的lambda行为_C#_Linq_Nhibernate_Lambda_Iqueryable - Fatal编程技术网

C#奇怪的lambda行为

C#奇怪的lambda行为,c#,linq,nhibernate,lambda,iqueryable,C#,Linq,Nhibernate,Lambda,Iqueryable,有人能指出为什么会发生这种情况吗: 我正在为它使用NHibernate和Linq提供程序 此处列出了失败的代码: 现在,如果我用我的InMemoryRepository测试相同的代码,它将每个实体存储在一个简单的列表中,(x=>true)工作得非常好 那么-为什么在使用NHibernate时会发生这种情况?这是一个bug还是我做错了什么? 谢谢。根据您显示的SqLite输出,我猜这是NHibernate中的一个bug。你可以试试 x= > x.id=x.id 而不是 x= > true ,看看

有人能指出为什么会发生这种情况吗:

我正在为它使用
NHibernate
Linq
提供程序

此处列出了失败的代码:


现在,如果我用我的
InMemoryRepository
测试相同的代码,它将每个实体存储在一个简单的列表中,
(x=>true)
工作得非常好

那么-为什么在使用
NHibernate
时会发生这种情况?这是一个bug还是我做错了什么?


谢谢。

根据您显示的SqLite输出,我猜这是NHibernate中的一个bug。你可以试试<代码> x= > x.id=x.id 而不是<代码> x= > true <代码>,看看它是否有效。

我不知道NHiBernt,但问题是从生成的SQL中明显的:你的数据库不考虑真(小写T)等于true(大写T)。在SQL server中,您可以通过修改数据库排序规则来改变这一点(这是一个非常糟糕的主意,除非您出于其他原因需要区分大小写)


我猜这是NHibernate中的一个bug,你需要解决它。测试
t=>1==1
而不是
t=>true
,这可能取决于NHibernate代码的编写方式。

在我看来像个bug。它将布尔运算转换为字符串求值,甚至这也搞砸了,因为它使用
true
设置查询并使用
true
求值,因此区分大小写的测试将失败。

这很可能与NHibernate处理它从lambda创建的表达式的方式有关,虽然天知道它在做什么。。。
var sequence = session.Query<T>();

var wtfSequence = sequence.Where(x => true);
var okaySequence = sequence.Where(x => x.Id > 0);
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)]