Atributo Constructor Con Lambda

Esoes posible hacer esto:

public static void SomeMethod<TFunc>(Expression<TFunc> expr)
{
    //LambdaExpression happily excepts any Expession<TFunc>
    LambdaExpression lamb = expr;
}

y llámalo a otro lugar pasando un lambda para el parámetro:

SomeMethod<Func<IQueryable<Person>,Person>>( p=>p.FirstOrDefault());

En cambio, me gustaría pasar una expresión como un parámetro a unaconstructor de atributos. ¿Es posible hacer lo siguiente?

class ExpandableQueryAttribute: Attribute {
    private LambdaExpression someLambda;
    //ctor
    public ExpandableQueryMethodAttribute(LambdaExpression expression) 
    {
        someLambda = expression
    } 
}

//usage:
static LambdaExpression exp = 
      (Expression<Func<IQueryable<Person>, Person>>)
        (p => p.FirstOrDefault());

[ExpandableQueryAttribute(exp)]   //error here
// "An attribute argument must be a constant expression, typeof expression
// or array creation expression of an attribute parameter type"

Mi objetivo es especificar un método o lambda en el constructor del atributo (incluso si tengo que declarar un método con nombre completo y pasar el nombre del método de alguna manera, estaría bien).

Los tipos de parámetros pueden cambiar, pero es importante que el constructor de atributos pueda tomar ese parámetro y de alguna manera poder asignarlo a un campo de tipo LambdaExpression

Quiero que la declaración de la lambda / método esté justo por encima de la llamada al constructor de atributos, o en línea, para que no tenga que ir muy lejos para ver qué se está pasando.

Por lo tanto, estas alternativas estarían bien, pero sin suerte hacer que funcionen:

public static ... FuncName(...){...}

[ExpandableQueryAttribute(FuncName)]   
// ...

o

//lambdas aren't allowed inline for an attribute, as far as I know
[ExpandableQueryAttribute(q => q.FirstOrDefault())]   
// ...

La solución existente es pasar un ID de número al constructor (cumplir con el requisito de "el argumento debe ser una constante"), que el constructor utiliza para realizar una búsqueda en un diccionario donde se han agregado expresiones anteriormente. Esperaba mejorar / simplificar esto, pero tengo la sensación de que no mejora nada debido a las limitaciones en los constructores de atributos.

Respuestas a la pregunta(4)

Su respuesta a la pregunta