问题描述
Dim records = From record In db.table
Where record.Level = "Level 1"
Where record.NewNumber IsNot Nothing
Select record.Number
当我调用records.ToString()时,我得到这样的输出:
When I call records.ToString() I get an output like so:
缺少NewNumber的where子句.如果将linq更改为NewNumber为空,则得到以下信息:
The where clause for NewNumber is not null is missing. If I change the linq to where NewNumber is nothing I get the following:
这是怎么回事?数字字段是我的主键,而newnumber只是另一个字段.我只更改了该帖子的一些名称/值.用And/AndAlso在同一行上执行两个where子句没有区别.
What is going on here? The number field is my primary key and newnumber is just another field. I've only changed some of the names/values for this post. Executing both where clauses on the same line with And/AndAlso makes no difference.
字段NewNumber就是这样配置的.
The field NewNumber is configured as such.
推荐答案
EF知道NewNumber
不能为null
/nothing
,并且由于谓词(IsNot Nothing
)始终为真而忽略了谓词(IsNot Nothing
),或者当它始终为假(Is Nothing
)时,它将变为易于为查询优化器评估的内容.
EF knows that NewNumber
can't be null
/nothing
and either ignores the predicate (IsNot Nothing
) because it's always true, or when it's always false (Is Nothing
) it turns it into something that's easier to evaluate for the query optimizer.
这篇关于查询时生成不正确的SQL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!