Я пытаюсь настроить набор динамических c фильтров для внедрения в мой объект ORM во время выполнения (по одному для каждого типа сущности), поэтому я пытаюсь сделать что-то вроде этого:
Filters = new List<Action>
{
(Foo f) => ...,
(Bar b) => ...,
(Goo g) => ...,
};
Тогда, когда пользователь делает что-то вроде:
var tSet = db.GetAll<T>().Where(...).ToArray();
Я бы реализовал GetAll (), например:
public IQueryable<T> GetAll<T>() where T : class
{
using var db = Connection.Open();
var filter = Filters.FirstOrDefault(f => f.GetType() == typeof(Func<T, bool>)) as Func<T, bool>;
return (FiltersEnabled && filter != null) ? db.Select<T>().Where(filter) : db.Select<T>();
}
Можно ли каким-то образом сохранить List<Func<variousT, bool>>
как Я не могу заставить эту работу? Я пытался объявить это как:
protected ICollection<object> Filters = new List<object>();
, но это не сработало, и, очевидно, я не могу использовать делегатов Action
из-за различий в сигнатурах.