Implementar la misma funcionalidad que una consulta simple contiene () se vuelve más compleja cuando se usa el marco de entidad y las teclas primarias compuestas. Este artículo analiza varias formas de resolver este problema:
intentar usar una tupla que represente un valor de clave primaria compuesta para una unión directa o una operación contiene falla en el marco de la entidad. Esto se debe a que tales operaciones no se pueden convertir a SQL, porque las tuplas no se consideran valores originales en este contexto.
Otra forma es usar asenumerable () para extraer los datos de la tabla de la base de datos en la memoria y realizar el filtrado necesario usando LINQ a los objetos. Sin embargo, para tablas grandes, esta solución es extremadamente ineficiente.
usando una instrucción Contiene () separada para cada componente de clave primaria compuesta dará como resultado un filtrado incorrecto. Este enfoque puede producir resultados engañosos porque las entidades que contienen solo un componente coincidente se incluirán por error.
puede usar una consulta modificada Contiene () que contiene los valores calculados derivados del componente de clave primaria compuesta (por ejemplo, entity.id1 * entity.id2). Sin embargo, esta solución no se puede buscar y conduce a un bajo rendimiento.
El método más escalable es combinar contenido y conexiones de memoria. Este método utiliza una consulta preliminar Contiene () para reducir el conjunto de resultados y luego refinarlo con mayor precisión a través de conexiones de memoria.
constructores preliminares como Linqkit permiten la creación de consultas que contienen o cláusulas para cada combinación de valor de clave primaria compuesta. Si bien este método puede funcionar para listas pequeñas, para listas grandes, su rendimiento se degradará.
Otra forma es usar Union para combinar múltiples consultas que combinan cada valor de clave primaria compuesta. Esta solución puede funcionar para listas pequeñas a medianas.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3