Tengo un formulario de búsqueda con un campo de nombre de usuario opcional. Si no se proporciona el nombre de usuario, se deben devolver todas las coincidencias.Linq con cláusulas WHERE opcionales y Sql Server CE
Estoy utilizando Linq y Sql Server CE 4.0.
El código LINQ tiene el siguiente -.>
from p in context.Accounts
where (name==string.Empty || p.UserName.Contains(name))
con SQL Server CE esto arroja el siguiente error
"Un parámetro no está permitido en esta ubicación Asegúrese de que el símbolo '@' está en una ubicación válida o que los parámetros son válidos en esta declaración SQL ".
¿Hay algún otro enfoque que pueda tomar para tener cláusulas Where en Linq?
FYI la siguiente
from p in context.Accounts
where (string.IsNullOrEmpty(name) || p.UserName.Contains(name))
me da el error
"El valor del argumento especificado para la función no es válida. [Argumento # = 1, nombre de la función (si se conoce) = isnull] "}
Esto se debe a que el servidor SQL Sql no admite IsNull. Simplemente hago lo siguiente si el parámetro Name es nulo.
if (name == null)
name = string.Empty;
¿Se compilará esto a una sentencia SQL cuando se ejecute? ¿O extraerá todas las cuentas, luego filtrará, etc. Digamos que tengo 10,000 cuentas, todas serán extraídas a la memoria y luego filtradas? – Kenoyer130
@ Kenoyer130, compilará en una declaración sql. –
@ Kenoyer130 debería leer un poco acerca de la ejecución retrasada de LINQ o tendrá sorpresas y errores que no comprenderá;) – Guillaume86