Я работаю над универсальным провайдером OData, чтобы пойти против обычного провайдера данных, который у нас здесь. Это полностью динамично в том, что я запрашиваю у поставщика данных таблицу, которую он знает. У меня есть базовая структура хранения, основанная на примере кода OData.
Моя проблема в том, что OData поддерживает запросы и ожидает от меня реализации IQueryable. С другой стороны, у меня нет поддержки запросов. Не шутка - провайдер возвращает таблицы и предложение WHERE не поддерживается. Производительность здесь не проблема - таблицы маленькие. Сортировать их можно в провайдере OData.
Моя главная проблема заключается в следующем.
- Я отправляю инструкцию SQL, чтобы получить данные таблицы. Результатом является своего рода устройство чтения данных ADO.NET.
- Мне нужно предоставить реализацию IQueryable для этих данных, чтобы потенциально разрешить последующую фильтрацию.
Есть идеи, как лучше всего это коснуться? Только для .NET 3.5 (4.0 не планируется в течение некоторого времени). Я серьезно думал о создании динамических классов DTO для каждой таблицы (с использованием байт-кода), чтобы я мог использовать стандартный LINQ. Сейчас я использую словарь для каждой записи (не слишком эффективный), но я не вижу реального способа фильтрации / сортировки по ним.