Konstruktor atrybutów z Lambdą

Tojest możliwe, aby to zrobić:

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

i wywołaj go gdzie indziej, mijając lambdę dla parametru:

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

Zamiast tego chciałbym przekazać wyrażenie jako parametr dokonstruktor atrybutów. Czy możliwe jest wykonanie poniższych czynności?

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"

Moim celem jest określenie metody lub lambda w konstruktorze atrybutu (nawet jeśli muszę zadeklarować pełną nazwę metody i przekazać nazwę metody w jakiś sposób, byłoby dobrze).

Typy parametrów mogą się zmieniać, ale ważne jest, aby konstruktor atrybutów mógł przyjąć ten parametr iw pewien sposób móc przypisać go do pola typu LambdaExpression

Chcę, aby deklaracja metody lambda / metody znajdowała się tuż nad wywołaniem konstruktora atrybutu lub inline, tak aby nie trzeba było iść daleko, aby zobaczyć, co jest przekazywane.

Więc te alternatywy byłyby w porządku, ale bez powodzenia, aby je uruchomić:

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

[ExpandableQueryAttribute(FuncName)]   
// ...

lub

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

Istniejąca praca polega na przekazaniu identyfikatora numeru konstruktorowi (spełnienie warunku „argument musi być stałym” wymogiem), który jest używany przez konstruktor do wyszukiwania w słowniku, w którym wcześniej dodano wyrażenia. Miałem nadzieję, że uda się to usprawnić / uprościć, ale mam wrażenie, że nie jest lepiej z powodu ograniczeń konstruktorów atrybutów.

questionAnswers(4)

yourAnswerToTheQuestion