Tengo una consulta como esta
(from u in DataContext.Users
where u.Division == strUserDiv
&& u.Age > 18
&& u.Height > strHeightinFeet
select new DTO_UserMaster
{
Prop1 = u.Name,
}).ToList();
Quiero agregar las diversas condiciones como edad, altura en función de si esas condiciones se proporcionaron al método que ejecuta esta consulta. Todas las condiciones incluirán la división de usuarios. Si se proporcionó la edad, quiero agregar eso a la consulta. Del mismo modo, si se proporcionó la altura, también quiero agregar eso.
Si esto se hiciera usando consultas sql, habría usado el generador de cadenas para agregarlas a la consulta strSQL principal. Pero aquí en Linq solo puedo pensar en usar una condición IF en la que escribiré la misma consulta tres veces, con cada bloque IF teniendo una condición adicional. ¿Hay una mejor manera de hacer esto?
fuente
LINQ to Entities does not recognize the method 'System.String get_Item(System.String)' method, and this method cannot be translated into a store expression.
Normalmente uso el encadenamiento de métodos pero tengo el mismo problema. Y aquí está la extensión que uso
Ayuda a evitar roturas de cadena. También lo mismo
ConditionalOrderBy
yConditionalOrderByDescending
son útiles.fuente
una opción.
o puede cambiar a la sintaxis del método para linq y usar condiciones if para adjuntar expresiones a la cláusula where.
fuente
Simplemente lo estoy usando en mi cláusula where como
fuente
Según ciertas condiciones, agregue la condición where ...
fuente
Aquí está mi código para hacer algo similar. Este es un método en mi API WCF SOAP Web Service.
La consulta base es lo
Select(f => f)
que significa básicamente TODO, y lasWhere
cláusulas se adjuntan opcionalmente. La finalSelect
es opcional. Utilizo para convertir los objetos de las filas de la base de datos en objetos de resultado "Fruta".fuente
Suponiendo el siguiente parámetro,
Simplemente usando
&&
y||
operadores condicionales podemos tener otra versión.Al igual que Param1, puede agregar cualquier número de parámetros para la condición de búsqueda.
fuente
Me encontré con esto buscando algo más, pero pensé en lanzar la versión lambda.
Primero, crearía una clase como esta para pasar parámetros a una capa de datos:
Luego, en mi capa de datos, algo como esto:
Depende de usted dónde materialice la consulta. Puede tener una capa entre la aplicación y los datos que convierta las representaciones específicas de la base de datos en agnósticas de la base de datos (tal vez consulte varias fuentes de datos). Esa capa puede obtener varios tipos de consultables de estas fuentes y asignarlos a una representación POCO común, por ejemplo.
fuente
Solo para agregar a la respuesta aceptada anterior aquí , si está haciendo una búsqueda dinámica en una combinación, considere devolver un nuevo objeto con ambas tablas (t1, t2) en la consulta inicial de linq para que pueda acceder a ellos individualmente para hacer el condicional buscar.
Obtuve la respuesta que estaba buscando aquí con respecto a unir dos tablas y consultar columnas específicas en cualquiera de las tablas
fuente