Я разрабатываю настраиваемый веб-элемент управления, который может применять фильтры к объекту LinqDataSource. Это общий элемент управления, поскольку он должен работать с объектом определенного типа.
Элемент управления знает, с каким полем объекта он должен работать, по следующему полю
/// <summary>
/// Method to get compared column from object
/// </summary>
public Expression<Func<T, int>> GetColumnMethod;
(Я передаю ему метод, который получает соответствующее поле из типа объекта)
Мы выполняем фильтрацию с помощью такого кода
... if (selectedValue == "‹ = ") predicate = predicate.And (c => method (c)‹ = val); if (selectedValue == "‹ ") predicate = predicate.And (c => method (c)‹ val);
Все продолжается до тех пор, пока не произойдет преобразование LINQ to SQL. Тогда ошибка «Метод '.....' не поддерживает перевод в SQL.
конечно, CLR не умеет делать SQL для делегатов.
Если бы только C # мог скомпилировать выражение перед переводом в SQL, но я понятия не имею, как заставить его это сделать.
Извращения вроде Expression.Compile (какие бы хитрые приемы я ни пробовал целый день - я уже не могу их вспомнить ... ничего не помогло)
Но ... во время выполнения CLR уже знает тип моего объекта, поэтому ему удалось построить выражение SQL, скомпилировав значения делегата. Но как это сделать ? Бог знает.
Помощь очень признательна.