2015-08-11 14 views
5

Come posso convertire un nome di proprietà in espressione Lambda in C#?Nome proprietà a Lambda Expression C#

Ti piace questa: string prop = "Name"; a (p => p.Name)

public class Person{ 
    public string Name{ get; set; } 
} 

Grazie!

+0

espressione Un lambda non è un tipo. Intendi un delegato o un albero delle espressioni? E di * esattamente * di che tipo? –

+0

Non capisco la tua domanda ... Vuoi trasformare una dichiarazione di variabile in un'espressione di accesso alla proprietà? –

+0

Per favore spiega cosa stai cercando di ottenere. Convertire un nome di proprietà in Lambda non ha molto senso. Aggiungi un contesto. –

risposta

11

Uso alberi di espressione si può generare l'espressione lambda.

using System.Linq.Expressions; 
public static Expression<Func<T, object>> GetPropertySelector<T>(string propertyName) 
{ 
    var arg = Expression.Parameter(typeof(T), "x"); 
    var property = Expression.Property(arg, propertyName); 
    //return the property as object 
    var conv = Expression.Convert(property, typeof(object)); 
    var exp = Expression.Lambda<Func<T, object>>(conv, new ParameterExpression[] { arg }); 
    return exp; 
} 

per Person si può chiamare come:

var exp = GetPropertySelector<Person>("Name");//exp: x=>x.Name 
+1

Questa non è una riflessione –

+0

Sì, hai ragione. Ho corretto la risposta. –

+0

Funziona solo per la stringa. C'è un modo per rendere Expression.Lambda > generico? Ho provato Expression.Lambda > ma non ha funzionato. –

1

Un lambda è solo una funzione anonima. È possibile memorizzare lambda nei delegati proprio come i metodi regolari. Ti suggerisco di provare a rendere "Nome" una proprietà.

public string Name { get { return p.Name; } }

Se si vuole veramente una lambda, utilizzare un tipo delegato, come Funz.

public Func<string> Name =() => p.Name;

+0

Un lambda non è un metodo anonimo di per sé .. –

+0

beh sì, dal momento che non ha un nome per definire la sua posizione. –

+0

E per quanto riguarda gli alberi di espressione? Anche loro sono delegati? : P –

Problemi correlati