Пока все до сих пор показал вам, как сделать очевидную вещь, то есть группировать данные в кусках, соответствующих одному условию, никто не обращался, что вы на самом деле просят
определить, какой продукт был отфильтрован , в котором, когда условие
Жесткий q uestion is как будет регистрироваться, где условие?
Это может показаться тривиальным, но вы потерпите неудачу, потому что вы не сможете получить строковое представление используемого объекта Func
. Это делегат, т.скомпилированный код, и вам придется перепроектировать его во время выполнения, чтобы получить исходный код. Это само по себе достаточно сложно, но если компилятор решил оптимизировать код, который вы потеряли.
Только если вы готовы создать свой собственный метод расширения (ы), которые используют выражения в смену Func
s вы будете иметь возможность войти в состояние где, потому что выражение состоит из маркеров, которые могут быть легко «ToString-ed» во время выполнения.
Например:
public static IEnumerable<T> WhereEx<T>(this IEnumerable<T> sequence, Expression<Func<T, bool>> condition)
{
var logString = condition.Body.ToString();
foreach (T item in sequence.Where(condition.Compile()))
{
yield return item;
// logging hook here, this one simply dumps in Linqpad.
string.Format("Item '{0}' meets '{1}'", item, logString).Dump();
}
}
Теперь вы действительно улавливающий фильтр. Но вы не знаете, где в коде применяется фильтр. Если вы также хотите записывать кадры стека, производительность, скорее всего, станет проблемой (отражение!), Потому что она уже находится под давлением, каждый раз компилируя выражение. Затем ведение журнала должно быть асинхронной, включающей в себя потокобезопасную очередь протоколирования.
Спасибо за ответ – memumani
Вы искали то, что искали? (Кроме того, похоже, что вы прокомментировали свой вопрос, а не на мой ответ: P) –
Спасибо за ответ. Различные запросы в разных местах, где я хочу регистрировать такую информацию. Вместо того, чтобы вносить изменения в несколько мест, есть какой-то жанрализованный подход, чтобы держать его в одном месте или с минимальными изменениями. – memumani