2009-05-03 3 views
2

Ich habe eine Frage im Zusammenhang mit this one. Ich möchte keine Berechnung (Aggregation) durchführen, aber ich muss Anzeigewerte von einer Assoziation erhalten. In meinem C# -Code kann ich direkt auf den Wert verweisen, da Linq durch die Fremdschlüsseleinschränkung die gesamte erforderliche Verdrahtung generiert hat. Wenn ich das IQueryable als Gridview-Datenquelleneigenschaft angeben und auf etwas verweisen, das keine Spalte der primären Entität in der Ergebnismenge ist, erhalte ich den Fehler, dass die Spalte nicht existiert. Als ein Neuling für Linq, ich vermute, die Zuweisung impliziert implizit die IQueryable in eine Liste, und die Assoziationen sind verloren. Meine Frage ist, was ist ein guter Weg, dies zu tun?Linq to SQL und Gridview Datenquelle

Ich nehme an, dass ich das umgehen kann, indem ich eine parallele Abfrage schreibe, die einen anonymen Typ zurückgibt, der alle Spalten enthält, die ich für die Gridview benötige. Es scheint so, als würde ich Daten redundant im Speicher halten, die ich bereits habe. Kann ich die In-Memory-Datenstrukturen bei der Zuweisung der Datenquelle spontan abfragen? Oder gibt es eine direktere Lösung?

Die Gridview soll die medizinischen Gruppenzuordnungen des Arztes anzeigen, und der Name der Assoziation befindet sich in einer Nachschlagetabelle.

  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 http://heeroz.com/phys.jpg

So, basierend auf Denis' Antwort, entfernte ich das alles nicht mehr benötigten Sachen aus meiner Anfrage. Ich dachte mir, dass ich vielleicht nicht die richtige Frage stellen würde.

Wie auch immer, die Seite zeigt die Daten eines Arztes. Ich möchte alle medizinischen Gruppenzugehörigkeiten in einem Raster anzeigen (und den Benutzer erlauben, Zugehörigkeiten einzufügen, zu bearbeiten und zu aktualisieren). Mir ist jetzt klar, dass ich mich nicht explizit diesen anderen Tabellen anschließen muss - Linq macht das für mich. Ich kann auf die Lizenznummer zugreifen, die sich in einer separaten Tabelle befindet, indem ich sie durch die Kette der Kindergesellschaften referenziere. Ich kann nicht die medizinischen Gruppennamen in der gridview verweisen, die mich auf meine Frage zurückbringt:

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

Das funktioniert nicht, weil med_group_print_name für das Gridview zugänglich ist nicht:

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

Wieder Trag mit mir, wenn es nur allzu offensichtlich ist, dass ich Linq nicht verstehe ... weil ich es nicht verstehe.

Antwort

1

Ihre Anfrage scheint seltsam. Sie sollten einfach versuchen

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

im Raster angezeigt werden soll. Das sollte funktionieren. Warum auch die Aufrufe von Load()? Wenn der DataContext nicht entfernt wird, wenn das Raster gebunden ist, sollten Sie ihn nicht benötigen.

Wenn Sie noch Fragen haben, können Sie bitte die Fehlermeldung Sie Beiträge verfassen bekommen, dass ...

Teil 2

Das Problem helfen würde, ist, dass Sie der Name ist effektiv nicht in der PhysMedGroup haben . Sie müssen eine Ebene tiefer zum MedGroupLookup navigieren, um auf den Namen zuzugreifen, da es sich um eine Eigenschaft dieser Klasse handelt.

Je nach verwendeter Technologie (es scheint sich dabei um WinForms oder Web Forms zu handeln) müssen Sie Ihre Datenbindung für den Zugriff auf MedGroupLookup.med_group_print_name konfigurieren.

+0

Ja, ich dachte, dass die Lasten möglicherweise nicht benötigt werden. Ich habe meine Frage überarbeitet. – cdonner

+0

oder eher, wird das in Kürze tun. – cdonner

+0

Dann bekomme ich das: Ein Feld oder eine Eigenschaft mit dem Namen 'MedGroupLookup.med_group_print_name' wurde nicht in der ausgewählten Datenquelle gefunden. – cdonner