Je veux exécuter une requête comme ceci
var result = from entry in table
where entry.something == null
select entry;
et obtenir un IS NULL
généré.
Édité: Après les deux premières réponses, je ressens le besoin de clarifier que j'utilise Entity Framework et non Linq to SQL. La méthode object.Equals() ne semble pas fonctionner dans EF.
Éditer n°2: La requête ci-dessus fonctionne comme prévu. Elle génère correctement IS NULL
. Cependant, mon code de production était
valeur = null;
var result = from entry in table
where entry.something == valeur
select entry;
et le SQL généré était something = @p; @p = NULL
. Il semble qu'EF traduise correctement l'expression constante, mais s'il y a une variable impliquée, elle la traite comme une comparaison normale. Cela a du sens en fait. Je vais clore cette question.
17 votes
Je pense que cela n'a pas vraiment de sens... Le connecteur devrait être un peu intelligent et ne pas nous demander de faire son travail : réaliser une traduction correcte en SQL d'une requête C# correcte. Cela génère un comportement inattendu.
6 votes
Je suis avec Julien, c'est un échec de la part de EF
1 votes
C'est un échec des normes, et cela empire encore maintenant que la comparaison avec null donne systématiquement undefined depuis SQL Server 2016 avec les ANCI NULL activés en permanence. Null peut représenter une valeur inconnue, mais "null" en soi n'est pas une valeur inconnue. La comparaison d'une valeur null avec une autre valeur null devrait absolument donner vrai, mais malheureusement la norme s'écarte du bon sens ainsi que de la logique booléenne.