Domanda

Ho una domanda relativa a questa . Non voglio fare un calcolo (aggregazione), ma devo ottenere i valori di visualizzazione da un'associazione. Nel mio codice C #, posso fare direttamente riferimento al valore, perché il vincolo di chiave esterna ha fatto sì che Linq generasse tutto il cablaggio necessario. Quando si specifica IQueryable come proprietà dell'origine dati Gridview e si fa riferimento a qualcosa che non è una colonna dell'entità primaria nel set di risultati, viene visualizzato un errore che la colonna non esiste. Come novizio di Linq, immagino che il compito converta implicitamente l'IQueryable in un elenco e le associazioni vadano perse. La mia domanda è: qual è un buon modo per farlo?

Suppongo di poter aggirare questo problema scrivendo una query parallela che restituisce un tipo anonimo che contiene tutte le colonne di cui ho bisogno per il gridview. Sembra che così facendo conserverei i dati in memoria in modo ridondante che ho già. È possibile eseguire una query al volo sulle strutture di dati in memoria durante l'assegnazione dell'origine dati? O c'è una soluzione più diretta?

Il gridview dovrebbe mostrare le associazioni del gruppo medico del medico e il nome dell'associazione è in una tabella di ricerca.

            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;

 alt text
(fonte: heeroz.com )

Quindi, in base alla risposta di Denis, ho rimosso tutte le cose non necessarie dalla mia query. Ho pensato che potrei non porre la domanda giusta per cominciare.

Comunque, la pagina mostra i dati di un medico. Voglio visualizzare tutte le affiliazioni di gruppi medici in una griglia (e consentire all'utente di inserire, modificare e aggiornare le affiliazioni). Ora mi rendo conto che non ho bisogno di unirmi esplicitamente a queste altre tabelle - Linq lo fa per me. Posso accedere al numero di licenza, che si trova in una tabella separata, facendo riferimento a esso attraverso la catena di associazioni figlio. Non posso fare riferimento al nome del gruppo medico nel gridview, il che mi riporta alla mia domanda:

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

Questo non funziona, perché med_group_print_name non è accessibile per GridView:

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

Ancora una volta, abbi pazienza con me, se è fin troppo ovvio che non capisco Linq ... perché non lo so.

È stato utile?

Soluzione

La tua query sembra strana. Dovresti provare a visualizzare semplicemente

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

nella tua griglia. Dovrebbe funzionare. Inoltre, perché le chiamate a Load ()? Se DataContext non viene eliminato quando la griglia è vincolante, non dovresti averne bisogno.

Se hai ancora problemi, puoi per favore pubblicare il messaggio di errore che ricevi, che sarebbe d'aiuto ...

Parte 2

Il problema è che il nome non si trova effettivamente nel PhysMedGroup. Devi accedere al livello inferiore di MedGroupLookup per accedere al nome, poiché è una proprietà di quella classe.

A seconda della tecnologia che si sta utilizzando (sembra essere WinForms o Web Forms), sarà necessario configurare l'associazione dati per accedere a MedGroupLookup.med_group_print_name.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top