score:0

  public static expression<func<t, tpropertytype>> propertyselector<t, tpropertytype>(this ienumerable<t> collection, string propertyname)
    {
        if (string.isnullorwhitespace(propertyname))
        {
            throw new argumentexception(nameof(propertyname));
        }

        var properties = typeof(t).getproperties();
        if (!properties.any(p => p.name == propertyname))
        {
            throw new objectnotfoundexception($"property: {propertyname} not found for type [{typeof(t).name}]");
        }

        var propertyinfo = properties.single(p => p.name == propertyname);

        var alias = expression.parameter(typeof(t), "_");
        var property = expression.property(alias, propertyinfo);
        var functype =  typeof(func<,>).makegenerictype(typeof(t), typeof(tpropertytype));
        var lambda = expression.lambda(functype, property, alias);

        return (expression<func<t, tpropertytype>>)lambda;
    }

score:1

var propertyinfo = properties.single(p => p.name == propertyname);
var functype =  typeof(func<,>).makegenerictype(typeof(t), propertyinfo.propertytype);

score:1

        var expression = people.propertyselector<person, string>("lastname");

Related Query

More Query from same tag