Обычно в моих репозиториях есть операторы регистрации для целей отладки, что позволяет мне видеть значения параметров. Недавно я пошел по пути создания универсального репозитория, который использует предикат Expression в качестве аргумента для большей гибкости, однако я не могу найти достойный способ регистрации условия там, где оно было бы удаленно полезно.
Пример метода:
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() на этом этапе, но результаты не очень читабельны:
Parameters [predicate: (fa.SomeId == value(NameSpace.SomeClass+<>c__DisplayClass2).SomeId)]
В конечном счете, я бы хотел увидеть что-то похожее на следующее:
Parameters [predicate: (fa.SomeId == 1 && fa.Account.Name == "MyName").SomeId)]
По сути, значение этого журнала заключается в том, чтобы знать входные значения, когда что-то взрывается. Есть ли способ обойти это, за исключением того, что пользователь API должен предоставить предикат в виде строки?
==
и заменить ее своим значением, но это не будет правильно представлять фактический предикат. - person Ani   schedule 03.03.2011x.Something == ExpressionNotInvolvingXYouWantToEvaluateEagerly
? Если да, то легко упростить. - person Ani   schedule 03.03.2011