Estoy intentando averiguar por qué una consulta simple en LINQ devuelve resultados impares.Consulta de LINQ que devuelve varias copias del primer resultado
Tengo una vista definida en la base de datos. Básicamente reúne muchas otras tablas y hace algo de munging de datos. Realmente no es nada especial, excepto por el hecho de que trata con un gran conjunto de datos y puede ser un poco lento.
Quiero consultar esta vista en función de un largo. Dos consultas de muestra a continuación muestran diferentes consultas a esta vista.
var la = Runtime.OmsEntityContext.Positions.Where(p => p.AccountNumber == 12345678).ToList();
var deDa = Runtime.OmsEntityContext.Positions.Where(p => p.AccountNumber == 12345678).Select(p => new { p.AccountNumber, p.SecurityNumber, p.CUSIP }).ToList();
El primero debe devolver una Lista. El segundo será una lista de objetos anónimos.
Cuando realizo estas consultas en el marco de Entidades, la primera me devolverá una lista de resultados donde todos son exactamente iguales.
La segunda consulta me devolverá los datos donde el número de cuenta es el que he consultado y los otros valores son diferentes. Esto parece hacer esto por número de cuenta, es decir, si tuviera que consultar un número de cuenta u otro, todos los objetos de Posición para una cuenta tendrían el mismo valor (el primero en la lista de Posiciones para esa cuenta) y la segunda cuenta tendría un conjunto de objetos de posición que tenían el mismo valor (una vez más, el primero en su lista de objetos de posición).
Puedo escribir SQL que es en efecto el mismo que cualquiera de las dos consultas de EF. Ambos regresan con resultados (digamos cuatro) que muestran los datos correctos, un número de cuenta con diferentes números de valores.
¿Por qué sucede esto? ¿Hay algo que podría estar haciendo mal para que, si tuviera cuatro resultados para la primera consulta anterior, los datos del primer registro también aparezcan en los objetos del 2-4º?
No puedo entender qué podría estar causando esto. He buscado en Google todo tipo de palabras clave y no he visto a nadie con este problema. Clasificamos parcialmente la clase Positions para una funcionalidad adicional (objeto inteligente) y algunas propiedades inteligentes. Incluso hay algunos constructores que proporcionan compatibilidad con algunos tipos de modelos de vista. Nada de esto se invoca en la solicitud (estoy 99% seguro de esto). Sin embargo, hacemos este mismo patrón en toda la aplicación.
Lo único que se me ocurre es que la asignación en el EDMX es complicada. ¿Hay alguna manera de que esto suceda si las "claves primarias" en el EDMX no fueran de hecho únicas dada la forma en que se construye la vista? Estoy pensando que el desarrollador que importó este modelo en el EDMX le permitió al diseñador seleccionar automáticamente lo que sería único.
¡Cualquier ayuda le daría a un desarrollador algo de esperanza!
Tome la secuencia de comandos SQL generada y ejecútelo de forma interactiva en Management Studio para ver qué está sucediendo realmente –
Como dije, tal vez use un generador de perfiles para ver el SQL que se está ejecutando. –