sagen, dass ich eine OData Abfrage haben, die wie folgt aussieht (Meine eigentliche Abfrage ist viel komplexer):in einer Projektion erweitern (Auswahl), WCF Data Services (OData)
Orders.Select(z => new { z.SubOrder.Addresses,
z.SubOrder.Cost,
z.SubOrder.SubOrderId,
z.Sequence});
Dies funktioniert gut. Nur dass das Address-Objekt ein Sub-Objekt enthält (StateRef). Da StateRef in der State-Tabelle nachschlägt, wird es als Null zurückgegeben.
Zur Veranschaulichung hier ein Beispiel dafür, wie die Adressobjekt Adresse aussehen könnte:
Address:
string Street 1
string Street 2
StateRef PrimaryState
string City
// ... 42 other string attributes not shown ...
Das StateRef
Objekt den Namen des Staates auf sich hat, sondern hat auch einige andere wichtige staatliche Eigenschaften (vielleicht Zustand Vogel?)
Also, was ich frage mich ist, muss ich jetzt eine "Unterprojektion" für z.SubOrder.Addresses erstellen, die alle 46 Attribute enthält, nur so dass ich auf den PrimaryState
Artikel zugreifen kann? (Ich hoffe nicht)
Abgesehen davon, viel mehr Codierung, bedeutet es auch, dass ich anonyme Typen verwenden müssen. Das macht mein Mapping von Hand (anstelle von AutoMapper).
Also was ich suche ist eine Möglichkeit, die StateRef innerhalb der Projektion zu "erweitern"?
Etwas wie folgt aus:
Orders.Select(z => new { z.SubOrder.Addresses.Expand("PrimaryState"),
z.SubOrder.Cost, ^
z.SubOrder.SubOrderId, |
z.Sequence}); |
|
// This is not allowed by the compiler ----------+
Der Versuch, das diesen Fehler geben:
Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access.
Update: Hier ist ein Beispiel Abfrage zu veranschaulichen, was ich fragen nach:
Users.Take(10).Select(x=>new { x.Id, x.Reputation, x.Comments})
Führen Sie diese gegen "data.stackexchange.com/stackoverflow/atom". Sie werden sehen, dass Comments ein Post-Objekt hat, das null zurückgibt.
Ich brauche das, um die Werte darin zurückzugeben.
Hinweis: Ich weiß, dass ich sie alle manuell in eine "Unterprojektion" eingeben kann. Lesen Sie oben, warum ich das nicht will.
Seit erweitern scheint nur auf dem ersten Kind zu arbeiten, können Sie Ihre Abfrage umkehren? Also für Ihr SO-Beispiel beginnen Sie mit Kommentaren, z. Kommentare.Expand (c => c.User) .Expand (c => c.Post) .Nehmen (10) – Phil
@Phil, Ach, nein. Dieses Beispiel ist einfach, aber meine eigentliche Abfrage ist sehr komplex und hat mehrere "Unterabschnitte". – Vaccano
Die Verbindung ist tot. –