VB.Net Linq to entities Null Comparaison - "n'Est Rien" ou "= Rien"?

Nous avons plusieurs projets en VB.Net, à l'aide de .Net Framework 4 et Linq to entities pour beaucoup de nos requêtes SQL. Le déplacement à EF est un nouveau tournant pour nous (utilisé pendant environ 4 à 6 mois) et a le soutien de la haute direction, parce que nous pouvons le code beaucoup plus vite. Il y a encore beaucoup d'stockées procs, mais nous même exécuter par Linq to entities.

Je suis l'espoir d'effacer une certaine confusion et je ne peux pas trouver une réponse directe, qui fait sens. Nous avons certaines requêtes où nous voulons les enregistrements où le champ a une valeur NULL. Ce sont de simples requêtes de sélection, pas d'agrégats ou de gauche rejoint, etc. Microsoft recommande la requête ressembler à quelque chose comme ceci MSDN Lien:

dim query = from a in MyContext.MyTables
Where a.MyField = Nothing
Select a

J'ai plusieurs projets sur lesquels je faire exactement cela et il fonctionne très bien, pas de mises en garde dans l'IDE. Récemment, un nouveau projet a été créé par un autre développeur et quand il a fait ses null case comme ci-dessus, nous avons tous cet avertissement dans l'IDE:

Avertissement 1 Cette expression sera toujours évaluer à Rien (en raison de la valeur null propagation de l'opérateur=). Pour vérifier si la valeur est null envisager d'utiliser 'n'Est Rien".

En comparant les projets, l'option explicite et option strict de chacun. Si l'on ignore l'avertissement, à nous de trouver le jeu d'enregistrements que nous recherchons lorsque l'application s'exécute. L'avertissement disparaît si je change le signe = EST. Mais pourquoi cet avertissement apparaît dans un projet et pas d'autres? C'est déroutant quand même sur MSDN il y a des exemples à l'aide de l'opérateur=.

VB.NET LINQ a aussi le Equals mot-clé. Je n'ai pas de moyen de le tester, mais peut-être essayer ça à la place? Where a.MyField Equals Nothing
C'est un mot-clé contextuel qui est utilisé dans Join clauses (autant que je sache). Je ne pense pas que vous pouvez l'utiliser n'importe où ailleurs.

OriginalL'auteur | 2012-07-10