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()
答案 0 :(得分:1)
EF知道NewNumber
无法null
/ nothing
并且忽略谓词(IsNot Nothing
),因为它始终为真,或者如果它始终为假(Is Nothing
),则会将其转换为对查询优化程序更容易评估的内容。