Зависит от того, каковы все варианты использования:)
Если ваш код БД мог бы использовать LINQ, то я мог бы рассмотреть вопрос о возврате Expression<Func<YourEntity,bool>>
, поскольку это можно применить через .Where
как к LINQ на основе БД, так и к LINQ-to-Objects - в последнем случае просто вызывая :
var filtered = original.AsQueryable().Where(filter);
(код БД, как правило, уже запрашиваемый, поэтому AsQueryable не требуется).
Одна плохая вещь в этом заключается в том, что нет гарантии, что конкретное выражение запроса будет работать на каждом поставщике LINQ.
В качестве альтернативы вам придется написать либо собственный базовый язык запросов, либо базовую древовидную структуру. А затем напишите код для преобразования как в свойство-отражение, так и в SQL. Много работы.
Одна заключительная мысль - просто получить два разных результата запроса и разделить две ветви. Итак, один SQL, один Predicate<T>
или аналогичный. Однако существует риск того, что они будут не синхронизированы.