Tenemos varios proyectos en VB.Net, utilizando .Net Framework 4 y Linq to Entities para muchas de nuestras consultas SQL. Mudarse a EF es un cambio nuevo para nosotros (lo hemos usado durante aproximadamente 4-6 meses) y tiene el respaldo de la administración superior porque podemos codificar mucho más rápido. Todavía usamos muchos procs almacenados, pero incluso los ejecutamos a través de Linq to Entities también.VB.Net Linq a las entidades Comparación nula - 'Is Nothing' o '= Nothing'?
Espero aclarar algo de confusión y no puedo encontrar una respuesta directa que tenga sentido. Tenemos algunas consultas donde queremos registros donde un campo específico tiene un valor NULL. Estas son las consultas de selección simple, sin agregados o izquierda se une, etc. Microsoft recomienda la consulta mirada algo como esto MSDN Link:
dim query = from a in MyContext.MyTables
Where a.MyField = Nothing
Select a
Tengo varios proyectos en los que hacer exactamente esto y funciona muy bien, no hay advertencias en el IDE . Recientemente, otro desarrollador creó un proyecto nuevo y cuando hizo su verificación nula como la anterior, todos recibimos esta advertencia en el IDE:
Advertencia 1 Esta expresión siempre evaluará a Nothing (debido a la propagación nula del operador equals) Para verificar si el valor es nulo, considere usar 'Is Nothing'.
Comparando los proyectos, la opción explícita y la opción estricta están activadas para cada uno. Si ignoramos la advertencia, obtenemos el conjunto exacto de registros que estamos buscando cuando se ejecuta la aplicación. La advertencia desaparece si cambio el signo = a IS. Pero, ¿por qué apareció esta advertencia en un proyecto y no en otros? Es confuso cuando incluso en MSDN hay ejemplos que usan el operador de iguales.
VB.NET LINQ también tiene la palabra clave 'Equals'. No tengo forma de probarlo, pero tal vez intente eso en su lugar? 'Donde a.MyField Equals Nothing' –
@Cory: es una palabra clave contextual que solo se usa en las cláusulas' Join' (AFAIK). No creo que puedas usarlo en ningún otro lado. –