2010-11-22 14 views
1

Ich habe eine Frage. Wie kann ich einen generischen Typparameter erstellen? Ich versuche, einen Ausdruck Baum zu bauen, und ich habe die folgende Zeile zu bauen:Wie generischen Typ Parameter

var expression = Expression 
       .Lambda<Func<T, bool>>(
        operation, 
        new ParameterExpression[] {parameter}); 

So wird erwartet, dass ich Typ-Parameter für T in & lgr angeben> aber der Typparameter T in nicht erst zur Laufzeit bekannt .

Bitte helfen. Dank

Antwort

3

Nun, könnte man es in einer generischen Methode schreiben:

public Expression<Func<T,bool>> BuildExpression<T>(...) 
{ 
    // Whatever you need to do 
    var expression = Expression 
      .Lambda<Func<T, bool>>(
       operation, 
       new ParameterExpression[] {parameter}); 
} 

... und dann diese Methode durch Reflexion nennen. Alternativ:

Ohne etwas mehr über Ihre Anforderungen zu wissen, nennen könnte, es ist sehr schwer, irgendwelche Ratschläge zu geben, um diese davon würde der geeignetste Ansatz sein. Bitte bearbeiten Sie Ihre Frage, um weitere Details zu erhalten.

+0

Danke für die Antwort. – Luka

+0

Danke für die Antwort. Was ich versuche zu erstellen, ist ein Dienstprogramm, das eine Abfrage, die in der Benutzeroberfläche vorgenommen wird, in Domäne abfragen wird. Das Problem ist, dass die Benutzeroberfläche nur DTO-Klassen und nicht die Domäne sieht. Daher muss ich linq expression (personDTO x) => x.Name in (Person x) => x.Name konvertieren. Irgendwie habe ich es geschafft, den Ausdruck zu parsen und aufzubauen. Was jetzt bleibt, ist der letzte Schritt. Expression.Lambda >. Das Problem ist, dass ich den Parameter T - nicht kenne (dies ist der Typparameter des realen Domain-Objekts, dh. (Person)), weil dieser Typparameter in Runtime erstellt wird. – Luka

+0

@Luka: Nun, das ist * einige * weitere Informationen gegeben - und ich vermute, dass die letzte Option die ist, die hier am besten geeignet ist. –

Verwandte Themen