Ответ Роба хорош, но требует полного перечисления. Вы можете привести синтаксис метода расширения и ленивую оценку:
я есть провайдер Linq, который успешно отправляет и получает данные из моего выбранного источника данных, но теперь я хотел бы сделать, поскольку у меня есть отфильтрованный набор результатов, - разрешить Linq to Objects обрабатывать остальную часть дерева выражений (для таких вещей, как Joins, проекция и т. д.)
Я думал, что я мог бы просто заменить константу выражения, содержащую мой IQueryProvider, на наборы результатов IEnumerable через ExpressionVisitor, а затем вернуть это новое выражение. Также верните провайдера IEnumerable из моего IQueryable ... но это, похоже, не работает :-(
Есть идеи?
Изменить: некоторые хорошие ответы здесь, но с учетом формы ...
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 может выполнить объединение ... (и позже проекцию) было бы очень приятно просто заменить константы ExpressionMyProv.Table<Customer>
а такжеMyProv.Table<Order>
с участиемList<Customer>
а такжеList<Order>
и пустьList<>
провайдер обрабатывает выражение ... это возможно? как?