Как указывает @Daniel, это далеко не просто. Схема решения состоит в том, чтобы позволить GetProduct
принимать аргумент типа Expression<Func<Product, bool>>
. Затем вам нужно пройти по дереву синтаксического анализа этого выражения, сгенерировав правильный SQL для известных функций, а также решить, как обрабатывать неизвестные функции. Для этого есть два основных варианта:
- Выдает ошибку (как делает linq-to-sql).
- Пропустите его в переводе, а затем примените его к возвращенному результату. Влияние на производительность, конечно, может быть огромным, если большая часть данных извлекается только для того, чтобы отфильтровать.
Это было бы забавное упражнение, но я вряд ли смогу найти способ оправдать его в реальном мире, когда уже есть linq2sql, linq2entities и linq2NHibernate, которые делают эту работу.