Für einen gegebenen Entitätssatz, sagen wir, WHO_TYPES, möchte ich die Spalten auf die ID
und die WHO_TYPE_NAME
beschränken.Wie filtern Ausgabespalten mit WCF OData Services?
Das Unternehmen setzte sich ausgesetzt ist, über:
config.SetEntitySetAccessRule("WHO_TYPES", EntitySetRights.AllRead);
... so kann ich nicht sehen, wie dies zu tun ist, wenn die Einheit/Tabellenzugriffsregeln festlegen. Ist es möglich, einen QueryInterceptor zu schreiben, um dies zu erreichen? Wenn das so ist, wie?
Ein weiterer Versuch, den ich gemacht habe, ist eine benutzerdefinierte Methode zu schreiben, die ein benutzerdefiniertes Objekt verweist:
[DataServiceKey("MY_WHO_TYPES")]
public partial class MY_WHO_TYPES
{
public MY_WHO_TYPES() { }
public int MY_WID { get; set; }
public string MY_WNAME { get; set; }
}
Meine eigene Methode:
[WebGet]
public IQueryable<MY_WHO_TYPES> GetWhoTypesCustom()
{
var whoCustom = from w in this.CurrentDataSource.WHO_TYPES
select new MY_WHO_TYPES() { MY_WID = w.ID, MY_WNAME = w.WHO_TYPE_NAME };
return whoCustom.AsQueryable<MY_WHO_TYPES>();
}
Mit diesem Versuch, erhalte ich die folgende Fehlermeldung:
Ich fühle eine Art Repository-Muster kommen in einer Antwort, bu t Ich hoffe, das könnte einfacher sein.
Die suggestion ein Tuple der Verwendung klingt gut, aber ich bin mir nicht ganz sicher, wie es zu implementieren, oder was der Rückgabetyp wäre:
select new { Tuple<int, string> (w.ID, w.WHO_TYPE_NAME)}; // error: Invalid anonymous type member declarator. Anonymous type members must be declared with a memeber assignment...
Als nächstes versuchte ich einfach einen anonymen Typ Rückkehr:
[WebGet]
public IQueryable GetWhoTypesCustom()
{
var whoCustom = from w in this.CurrentDataSource.WHO_TYPES
select new { w.ID, w.WHO_TYPE_NAME };
return whoCustom;
}
Das Problem damit ist, dass ich einen Fehler bekomme, der angibt, dass der IQueryable-Typ nicht definiert ist.