Ich bin in einer Situation, in der ich keine neuen Parameter zu einer Methode hinzufügen kann, und kann nicht die Logik von DataQuery entweder ändern - so kann ich nur den Inhalt der Methoden mit einer ähnlichen Konstruktion wie folgt ändern und die Eigenschaften von T.Abfangen und überschreiben where-Klausel von linq
IEnumerable<T> Get<T>(DataQuery<T> query) {
var collection = repo;
return query.Apply(repo).ToList();
}
Mein Problem ist, dass ich Unterstützung hinzufügen möchte Ts an meinem Team für das Abrufen zugewiesen, oder meine Firma oder einfach nur mich, aber ich habe keinen Zugang zu jedem Kontext von „me "vom Aufrufpunkt aus - sie sind im UserContext in den Methoden verfügbar.
Die DataQuery<T>.Apply()
ermöglicht mir, Ts Eigenschaften wie T.caseId <= 4
abzufragen und wird eine Liste mit Fällen 1-4 zurückgeben. die übersetzt werden in source.Where(t => t.caseId <= 4)
Meine Idee ist es, die folgenden Felder hinzufügen T
bool IsMineQuery
bool IsMyTeamQuery
bool IsMyCompanyQuery
und dann abfangen die Anrufe zu .Where(t => t.IsMineQuery == true)
oder .Where(t => t.IsMyTeamQuery == true)
und schreiben sie .Where(t => t.UserId == UserContext.UserId)
oder .Where(t => UserContext.TeamIds.Contains(t.TeamId))
aber ich habe keine Ahnung, wie man Abfangen der Anrufe.
Wie erreiche ich das?
Ich habe Ihre Frage vielleicht nicht vollständig verstanden, aber sollte 'bool IsMineQuery {get {return UserId == UserContext.UserId}}' genügen? – Heinzi
@Heinzi Nein, weil 'UserContext' nicht im' IsMyQuery' Getter verfügbar ist. – dasblinkenlight
Was ist 'DataQuery'? Hast du Kontrolle darüber? Wie konstruierst du und die Abfrage? –