Wir haben mehrere Projekte in VB.Net, die .Net Framework 4 und Linq to Entities für viele unserer SQL-Abfragen verwenden. Der Wechsel zu EF ist für uns eine neue Schicht (seit ca. 4-6 Monaten) und hat die Unterstützung des oberen Managements, weil wir so viel schneller programmieren können. Wir verwenden immer noch viele gespeicherte Procs, aber wir führen diese auch über Linq zu Entitäten aus.VB.Net Linq zu Entitäten Null Vergleich - "Ist nichts" oder "= Nichts"?
Ich hoffe, etwas Verwirrung zu klären, und ich kann keine direkte Antwort finden, die Sinn ergibt. Wir haben einige Abfragen, wo wir Datensätze haben wollen, wo ein bestimmtes Feld einen NULL-Wert hat. Dies sind einfache Auswahlabfragen, keine Aggregate oder links beitritt, usw. 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, bei denen ich genau das tun und es funktioniert super, keine Warnungen in der IDE . Kürzlich wurde ein neues Projekt von einem anderen Entwickler erstellt und als er seine Nullprüfung wie oben durchführte, erhalten wir alle diese Warnung in der IDE:
Warnung 1 Dieser Ausdruck wird immer zu Nothing ausgewertet (aufgrund der Nullverbreitung vom Gleichheitsoperator)). Um zu überprüfen, ob der Wert null ist, sollten Sie "Is Nothing" verwenden.
Beim Vergleichen der Projekte sind die Option explizit und die Option strikt aktiviert. Wenn wir die Warnung ignorieren, erhalten wir den genauen Datensatz, nach dem wir suchen, wenn die App ausgeführt wird. Die Warnung verschwindet, wenn ich das = Zeichen zu IS ändere. Aber warum erschien diese Warnung in einem Projekt und nicht in anderen? Es ist verwirrend, wenn es sogar auf MSDN Beispiele gibt, die den Gleichheitsoperator verwenden.
VB.NET LINQ hat auch das Schlüsselwort "Equals". Ich habe keine Möglichkeit, es zu testen, aber vielleicht versuchen Sie es stattdessen? 'Where a.MyField Equals Nothing' –
@Cory: Es ist ein kontextabhängiges Schlüsselwort, das nur in' Join'-Klauseln (AFAIK) verwendet wird. Ich glaube nicht, dass du es irgendwo anders benutzen kannst. –