查询时生成的SQL不正确

时间:2018-03-28 14:45:53

标签: vb.net entity-framework-6

Dim records = From record In db.table
              Where record.Level = "Level 1"
              Where record.NewNumber IsNot Nothing
              Select record.Number

当我调用records.ToString()时,我得到一个输出:

  

选择       [Extent1]。[Number] AS [Number]       FROM [dbo]。[table] AS [Extent1]       在哪里[Extent1]。[等级] = @ p__linq__0

缺少NewNumber的where子句不为null。如果我将linq更改为NewNumber无效的地方,我会得到以下结果:

  

选择       CAST(NULL AS varchar(1))AS [C1]       FROM(SELECT 1 AS X)AS [SingleRowTable1]       在哪里1 = 0

这里发生了什么?数字字段是我的主键,newnumber只是另一个字段。我只更改了这篇文章的一些名称/值。使用And / AndAlso执行同一行的where子句没有任何区别。

字段NewNumber配置如此。

  

[Property](Function(x)x.NewNumber).HasMaxLength(20).HasColumnName(" Newnumber")。IsOptional()

1 个答案:

答案 0 :(得分:1)

EF知道NewNumber无法null / nothing并且忽略谓词(IsNot Nothing),因为它始终为真,或者如果它始终为假(Is Nothing),则会将其转换为对查询优化程序更容易评估的内容。