Как регистрировать выражение предиката?

Обычно в моих репозиториях есть операторы регистрации для целей отладки, позволяющие мне видеть значения параметров. Недавно я пошел по пути создания универсального репозитория, который принимает выражение предиката в качестве аргумента для большой гибкости, однако я не могу придумать достойный способ записать условие в журнал, где это было бы удаленно полезно.

Пример метода:

public int GetCount<K>(Expression<Func<K, bool>> predicate) where K : class
{
    Logger.LogDebugMessage(String.Format("Parameters [predicate: {0}]", predicate == null ? string.Empty : predicate.Body.ToString()));

    ...
}

Вы можете видеть, что я использую Body.ToString () на этом этапе, но результаты не очень удобочитаемы:

Параметры [предикат: (fa.SomeId == value (NameSpace.SomeClass + <> c__DisplayClass2) .SomeId )]

В конечном итоге я бы хотел увидеть нечто похожее на приведенное ниже:

Параметры [предикат: (fa.SomeId == 1 && fa.Account.Name == "MyName"). Есть ли какой-нибудь способ обойти это ограничение, заставляющее пользователя API предоставлять предикат в виде строки?

9
задан smartcaveman 22 June 2012 в 01:15
поделиться