Не на 100% уверен, что это отвечает вашим потребностям, но мы используем функции лямбда-выражения, переданные в наши методы поиска:
В нашем классе репозитория:
public override IEnumerable<KeyCode> FindAll(Expression<Func<KeyCode, bool>> filter)
{
return GetAll().AsQueryable().Where(filter);
}
И в каком-то другом месте
KeyCodeRepository keycodeRepository = new KeyCodeRepository(unitOfWork);
IEnumerable<KeyCode> keyCodes = keycodeRepository
.FindAll(k => k.FlowStatus.Value == (int)FlowStatusType.Active
&& k.AppSystem.Id == appSystemId);
Выражение
k.FlowStatus.Value == (int)FlowStatusType.Active && k.AppSystem.Id == appSystemId
передается в качестве выражения предложению Where в методе FindAll. Это позволяет нам динамически определять наши фильтры каждый раз, когда мы вызываем FindAll ();