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.
Ja, ich dachte, dass die Lasten möglicherweise nicht benötigt werden. Ich habe meine Frage überarbeitet. – cdonner
oder eher, wird das in Kürze tun. – cdonner
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