Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.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
Vb.net 查询时生成的SQL不正确_Vb.net_Entity Framework 6 - Fatal编程技术网

Vb.net 查询时生成的SQL不正确

Vb.net 查询时生成的SQL不正确,vb.net,entity-framework-6,Vb.net,Entity Framework 6,当我调用records.ToString时,我得到如下输出: 挑选 [Extent1].[Number]作为[Number] 从[dbo].[table]到[Extent1] 其中[Extent1].[Level]=@p\u linq\u 0 缺少NewNumber is not null的where子句。如果我将linq更改为where NewNumber为nothing,则会得到以下结果: 挑选 CASTNULL作为varchar1作为[C1] 从中选择1作为X作为[SingleRowTab

当我调用records.ToString时,我得到如下输出:

挑选 [Extent1].[Number]作为[Number] 从[dbo].[table]到[Extent1] 其中[Extent1].[Level]=@p\u linq\u 0

缺少NewNumber is not null的where子句。如果我将linq更改为where NewNumber为nothing,则会得到以下结果:

挑选 CASTNULL作为varchar1作为[C1] 从中选择1作为X作为[SingleRowTable1] 其中1=0

这是怎么回事?number字段是我的主键,newnumber只是另一个字段。我只更改了这篇文章的一些名称/值。使用And/AndAlso在同一行执行两个where子句没有区别

字段NewNumber的配置如下所示

[Property]Functionx.NewNumber.HasMaxLength20.HasColumnNameNewnumber.IsOptional


EF知道NewNumber不能为null/nothing,或者忽略谓词IsNothing,因为它总是true,或者当它始终为false时,它会使查询优化器更容易对其进行计算。

AndAlso而不是第二个Where?不幸的是,没有区别。Newnumber是一个可空的nvarchar20,因此它不应该像这样进行优化。恩,EF不知道它可空。它可能是根据需要映射的,我在发布之后也这么认为,并明确地将它标记为可选的,而不改变SQL。描述中说字符串属性默认为空。为了排除这种奇怪的情况:您确实向modelBuilder添加了配置类,是吗?从EF的角度来看,该字段肯定是必需的。OP必须找到原因。由于默认情况下字符串是可选的,因此数据类型不同,或者字段为FK,表示所需的关系等。
Dim records = From record In db.table
              Where record.Level = "Level 1"
              Where record.NewNumber IsNot Nothing
              Select record.Number