VB.Net Linq to Entities-Null-Vergleich - 'Nichts' oder '= Nothing'?

Wir haben mehrere Projekte in VB.Net mit .Net Framework 4 und Linq to Entities für viele unserer SQL-Abfragen. Umzug in EF ist eine neue Verschiebung für uns (benutze es seit ca 4-6 Monaten) und hat die Rückendeckung des oberen Managements, weil wir können code so viel schneller. Verwenden wir noch eine Menge von gespeicherten Prozeduren, aber wir selbst führen diese durch Linq to Entities als gut.

Ich hoffe, klar einige Verwirrung, und ich kann nicht finden, eine direkte Antwort, die Sinn macht. Wir haben einige Anfragen, wo wir möchten, dass Datensätze, in denen ein bestimmtes Feld einen NULL-Wert. Dies sind einfache select-Abfragen, keine Aggregate oder left-joins, etc. Microsoft empfiehlt, die Abfrage in etwa so Aussehen MSDN-Link:

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

Ich habe mehrere Projekte, wo ich genau das tun, und es funktioniert Super, keine Warnungen in der IDE. Vor kurzem wurde ein neues Projekt erstellt wurde, wird von einem anderen Entwickler, und wenn er seine null-check wie oben, erhalten wir diese Warnung in der IDE:

Warnung 1 Dieser Ausdruck wird immer ausgewertet, um Nichts (wegen null propagation von der ist-gleich-operator). Um zu überprüfen, ob der Wert null ist, erwägen Sie die Verwendung 'Nichts'.

Vergleich der Projekte, option explicit und option strict sind auf für jeden. Wenn wir die Warnung ignorieren, bekommen wir die genaue Datensatz suchen wir für, wenn die app ausgeführt wird. Die Warnung geht Weg, wenn ich das = Zeichen IST. Aber warum kam diese Warnung erscheint in einem Projekt und die anderen nicht? Es ist verwirrend, wenn auch auf MSDN gibt es Beispiele, die über das ist-gleich-operator.

VB.NET LINQ hat auch die Equals Schlüsselwort. Ich habe nicht einen Weg, um es zu testen, aber vielleicht versuchen Sie das stattdessen? Where a.MyField Equals Nothing
Es ist eine kontextbezogene Schlüsselwort ist nur in Join Klauseln (AFAIK). Ich glaube nicht, dass Sie können es verwenden, überall.

InformationsquelleAutor | 2012-07-10

Schreibe einen Kommentar