【发布时间】:2010-10-16 06:59:26
【问题描述】:
我有一个 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 连接语法,但在这种情况下,数据不是来自 SQL源,所以我需要在代码中进行连接......但正如我所说,我有 2 个结果集,并且 Linq to Objects 可以进行连接......(以及后来的投影)只需替换表达式常量MyProv.Table<Customer> 和MyProv.Table<Order> 与List<Customer> 和List<Order> 并让List<> 提供程序处理表达式...这可能吗?怎么样?
【问题讨论】:
标签: c# linq expression-trees iqueryable