Pregunta

Tengo una pregunta relacionada con esta . No quiero hacer un cálculo (agregación), pero necesito obtener valores de visualización de una asociación. En mi código C #, puedo hacer referencia directa al valor, porque la restricción de clave externa hizo que Linq generara todo el cableado necesario. Cuando especifico IQueryable como la propiedad de origen de datos Gridview y hago referencia a algo que no es una columna de la entidad primaria en el conjunto de resultados, aparece un error de que la columna no existe. Como novato en Linq, supongo que la asignación convierte implícitamente el IQueryable en una lista, y las asociaciones se pierden. Mi pregunta es, ¿cuál es una buena manera de hacer esto?

Supongo que puedo solucionar esto escribiendo una consulta paralela que devuelva un tipo anónimo que contenga todas las columnas que necesito para la vista de cuadrícula. Parece que al hacerlo retendría los datos en la memoria de forma redundante que ya tengo. ¿Puedo consultar las estructuras de datos en memoria sobre la marcha al asignar la fuente de datos? ¿O hay una solución más directa?

Se supone que la vista de cuadrícula muestra las asociaciones de grupos médicos del médico, y el nombre de la asociación se encuentra en una tabla de búsqueda.

            IQueryable<Physician> ph =
                        from phys   in db.Physicians
                        //from name   in phys.PhysicianNames.DefaultIfEmpty()
                        //from lic    in phys.PhysicianLicenseNums.DefaultIfEmpty()
                        //from addr   in phys.PhysicianAddresses.DefaultIfEmpty()
                        //from npi    in phys.PhysicianNPIs.DefaultIfEmpty() 
                        //from assoc  in phys.PhysicianMedGroups.DefaultIfEmpty()
                        where phys.BQID == bqid
                        select phys;

 texto alternativo
(fuente: heeroz.com )

Entonces, según la respuesta de Denis, eliminé todas las cosas innecesarias de mi consulta. Pensé que para empezar no podría estar haciendo la pregunta correcta.

De todos modos, la página muestra los datos de un médico. Quiero mostrar todas las afiliaciones de grupos médicos en una cuadrícula (y permitir que el usuario inserte, edite y actualice las afiliaciones). Ahora me doy cuenta de que no necesito unirme explícitamente en estas otras tablas; Linq lo hace por mí. Puedo acceder al número de licencia, que está en una tabla separada, haciendo referencia a él a través de la cadena de asociaciones de niños. No puedo hacer referencia al nombre del grupo médico en la vista de cuadrícula, lo que me lleva de nuevo a mi pregunta:

AffiliationGrid.DataSource = ph.First().PhysicianMedGroups;

Esto no funciona, porque med_group_print_name no es accesible para GridView:

A field or property with the name 'med_group_print_name' was not found on the
selected data source.

Nuevamente, tengan paciencia conmigo, si es demasiado obvio que no entiendo a Linq ... porque no lo entiendo.

¿Fue útil?

Solución

Su consulta parece extraña. Deberías intentar simplemente mostrar

ph = from phys in db.Physicians
     where phys.BQID == bqid
     select phys;

en su cuadrícula. Eso debería funcionar. Además, ¿por qué las llamadas a Load ()? Si el DataContext no se elimina cuando la cuadrícula es vinculante, no debería necesitarlo.

Si aún tiene problemas, ¿puede publicar el mensaje de error que recibe, eso ayudaría ...

Parte 2

El problema es que tiene el nombre que efectivamente no está en el Grupo PhysMed. Debe navegar un nivel hacia abajo hasta MedGroupLookup para acceder al nombre, ya que es una propiedad de esa clase.

Dependiendo de la tecnología que esté utilizando (parece ser WinForms o Web Forms), deberá configurar su enlace de datos para acceder a MedGroupLookup.med_group_print_name.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top