2010-12-28 9 views
0

Ich habe ein Objektdiagramm, das aus einem Basis-Mitarbeiterobjekt und einer Reihe verwandter Nachrichtenobjekte besteht.WCF-Datendienste - Begrenzen von verwandten Objekten, die basierend auf Kriterien zurückgegeben werden

Ich bin in der Lage, die Mitarbeiter Objekte basierend auf Suchkriterien auf die Mitarbeiter Eigenschaften (zB Team) etc. zurückgeben. Wenn ich jedoch auf die Nachrichten erweitern, bekomme ich die vollständige Sammlung von Nachrichten zurück. Ich möchte in der Lage sein, entweder die obersten n Nachrichten zu nehmen (d. H. Auf 10 zuletzt zu beschränken) oder idealerweise einen Datumsbereich für die Nachrichtenobjekte zu verwenden, um zu begrenzen, wie viele zurückgebracht werden.

Bisher habe ich keine Möglichkeit, dies zu tun, herauszufinden, in der Lage zu: ich eine Fehlermeldung erhalten, wenn ich auf Eigenschaften auf der Nachricht zu filtern versuchen (& $ filter = Mitarbeiter/message/Startdate gibt einen Fehler „> keine Eigenschaft ‚Startdatum‘ existiert in Typ ‚System.Data.Objects.DataClasses.EntityCollection`1).

Versuch Top zu verwenden, um auf die Nachricht im Zusammenhang Objekt funktioniert auch nicht.

ich auch versucht haben, mit eine WebGet-Erweiterung, die eine String-Liste von Angestellten-IDs verwendet.Dies funktioniert so lange, bis die Liste zu lang wird, und dann fehlschlägt, weil die URL zu lang wird (es könnte möglich sein, einen Paging-Mechanismus einzurichten) ism auf diesem Ansatz) ...

Leider benötigt die UI-Steuerung, die ich verwende, die Daten in einer ziemlich spezifischen hierarchischen Form, so dass ich nicht leicht davon kommen kann, auf der Nachrichtenseite zu beginnen und rückwärts zu arbeiten.

Außerhalb von mehreren Aufrufen weiß jemand eine Methode, um dies mit WCF-Datendienste zu erreichen?

Danke! M.

Antwort

0

Sieht aus wie der einzige wirkliche Weg dies zu tun ist in der Tat die Richtung der Abfrage umzukehren.

Also statt von der Mitarbeiter, gehe ich von der Nachrichtenseite. Sie können die Mitarbeitereigenschaften filtern und die Nachrichtensammlung einschränken. Es ist nicht ideal, da es bedeutet, die Sammlung bei der Rückkehr zu wiederholen, um es auf den Mitarbeiter für das, was ich versuche, neu zu zentrieren, aber es wird funktionieren. Die asynchrone Natur von Silverlight und Rich Client bedeutet zumindest, dass eine zusätzliche Iteration erforderlich ist, aber sie scheint immer noch ziemlich schnell zu sein.

Eine weitere interessante Sache zu beachten: die aktuelle Version von ODATA/WCF Datendienste unterstützt keine Abfrage von Eigenschaften von geerbten Klassen, so dass ich die Start-/Enddatum Eigenschaften bis zur Basisklasse verschieben musste um meine Suche auf sie einzuschränken.

http://Site/Service.svc/Messages()?& $ filter = Mitarbeiter/Office eq 'Toronto' und (Jahr (Startdatum) eq 2010 und Monat (Startdatum) ge 9)