У меня есть провайдер Linq, который успешно отправляет и получает данные из выбранного источника данных, но теперь я хотел бы сделать, поскольку у меня есть отфильтрованный набор результатов, - разрешить Linq to Objects обрабатывать остальную часть дерева выражений (для вещей как Joins, проекция и т. д.)
Я думал, что я мог бы просто заменить константу выражения, содержащую мой IQueryProvider, на наборы результатов IEnumerable через ExpressionVisitor, а затем вернуть это новое выражение. Также верните провайдер IEnumerable из моего IQueryable ... но это, похоже, не работает: - (
Есть идеи?
Edit:
Некоторые хорошие ответы здесь, но с учетом формы ...
var qry = from c in MyProv.Table<Customer>()
Join o in MyProv.Table<Order>() on c.OrderID equals o.ID
select new
{
CustID = c.ID,
OrderID = o.ID
}
В моем провайдере я могу легко получить 2 набора результатов от клиентов и заказов, если бы данные были из источника SQL, я бы просто сконструировал и передал синтаксис SQL Join, но в этом случае данные не из SQL исходный код, поэтому мне нужно выполнить объединение в коде ... но, как я уже сказал, у меня есть 2 набора результатов, и Linq to Objects может выполнить объединение ... (и позже проекцию) было бы очень приятно просто заменить Константы выражения MyProv.Table<Customer>
и MyProv.Table<Order>
с List<Customer>
и List<Order>
, и пусть провайдер List<>
обработает выражение ... это возможно? как?