Abbiamo diversi progetti in VB.Net, utilizzando .Net Framework 4 e Linq alle entità per molte delle nostre query SQL. Passare a EF è un nuovo cambiamento per noi (lo stiamo usando da circa 4-6 mesi) e ha il sostegno del management superiore perché possiamo codificare molto più velocemente. Usiamo ancora molti proc memorizzati, ma li eseguiamo anche attraverso Linq alle Entities.VB.Net Linq alle entità Null Comparison - 'Is Nothing' or '= Nothing'?
Spero di chiarire un po 'di confusione e non riesco a trovare una risposta diretta che abbia senso. Abbiamo alcune query in cui vogliamo record in cui un campo specifico ha un valore NULL. Si tratta di semplici query di selezione, non aggregati o sinistra raccordi ecc Microsoft consiglia la query simile a questa MSDN Link:
dim query = from a in MyContext.MyTables
Where a.MyField = Nothing
Select a
Ho diversi progetti in cui faccio esattamente questo e funziona benissimo, nessun avviso nell'IDE . Di recente un nuovo progetto è stato creato da un altro sviluppatore e tutti gli abbiamo ricevuto questo avviso nell'IDE:
Avviso 1 Questa espressione sarà sempre valutata su Nothing (a causa della propagazione null dall'operatore di uguaglianza). Per verificare se il valore è nullo, considerare l'uso di 'Is Nothing'.
Confrontando i progetti, l'opzione esplicita e l'opzione rigorosa sono attivi per ognuno. Se ignoriamo l'avviso, otteniamo il set di record esatto che stiamo cercando quando viene eseguita l'app. L'avviso scompare se cambio il segno = su IS. Ma perché questo avvertimento appare in un progetto e non in altri? È confuso quando anche su MSDN ci sono esempi che utilizzano l'operatore di uguale.
VB.NET LINQ ha anche la parola chiave 'Equals'. Non ho un modo per testarlo, ma forse provarlo? 'Dove a.MyField è uguale a Niente' –
@Cory: È una parola chiave contestuale che viene utilizzata solo nelle clausole' Join' (AFAIK). Non penso che tu possa usarlo da nessun'altra parte. –