我有一个 Linq 提供程序,它成功地从我选择的数据源中获取数据,但是现在我有了过滤的结果集,我想做的是允许 Linq to Objects 处理表达式树的其余部分(对于诸如联接之类的事情,投影等)
我的想法是,我可以通过 ExpressionVisitor 将包含 IQueryProvider 的表达式常量替换为结果集 IEnumerable,然后返回该新表达式。还从我的 IQueryable 返回 IEnumerable 的提供程序...但这似乎不起作用:-(
有任何想法吗?
编辑:这里有一些很好的答案,但给出的形式......
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>
andList<Order>
并让List<>
提供者处理表达式……这可能吗?如何?