我正在尝试加深对 IQueryable 自定义提供程序和表达式树的了解。我对自定义解析交叉连接(即 SelectMany)感兴趣,我试图了解这是否正是 EF 在处理此问题时所做的事情:
var infoQuery =
from cust in db.Customers
from ord in cust.Orders
where cust.City == "London"
select ord;
据称EF 可以处理 cross joins,尽管该链接中的语法对我来说看起来不正确。然后我为 EF找到了一个标题为“ Cross Product Queries ”的链接。语法看起来“正确”,但文章本身就好像这些是正常的内部连接而不是交叉连接。
事实上,上面的代码片段来自上一篇文章——这让我想知道 EF 是否只是说“我知道这两个实体是如何相关的,所以我将自动形成内部连接”。
EF 和这个所谓的“交叉连接”样本的真实故事是什么?
脚注
当我尝试构建自己的 IQueryable LINQ 提供程序时,我为自己设定的教育目标是为上面的代码片段创建自己的查询上下文,以便在查询上调用 ToList() 时:
- 一个 Console.WriteLine() 被自动触发,打印“这是一个交叉连接:
Customer
和Order
- 在查询被完全解释之前,运算符被神奇地转换为 a (可能是ExpressionVisitor
==
,不确定)。!=
如果有人知道可以加快我的教育目标的文章或代码片段,请分享!:)