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