【发布时间】:2023-04-01 11:50:01
【问题描述】:
1)
into 关键字创建用于存储连接结果的临时标识符, 分组或选择子句。
我假设 into 关键字只能用作 group、join 或 select 子句的一部分?
2)
a) 我读到,当into 用作 group 或 select 子句的一部分时,它将查询分成两半,因此在查询的前半部分声明的范围变量总是在查询的后半部分超出范围。对吗?
b) 但是当into 用作join 子句的一部分时,rangle 变量永远不会超出查询范围(除非查询还包含group...into 或select...into) .我认为这是由于into 在与 join 子句一起使用时没有将查询拼接成两半?
c) 查询表达式由 from 子句和可选的查询主体(from,where,let 子句)组成,并且必须以 select 或 group 子句。
d) 如果into 确实将查询拼接成两半,则在以下示例中是 group 子句主体的一部分:
var result = from c1 in a1
group c1 by c1.name into GroupResult
select ...
谢谢
回复 Ufuk:
一)
在 group by 之后,您会得到这样的序列 IEnumerable>
GroupBy 运算符不会返回 IEnumerable<IGrouping<Key,Foo>> 类型的结果而不是 IEnumerable<Key,IEnumerable<Foo>>
b) 我们不能认为group...by...into 或join...into 可以拼接查询,即至少从概念上讲,查询的前半部分必须在查询的后半部分运行之前运行?
回复 Robotsushi:
我想的越多,我就越觉得我的问题毫无意义,因为它没有任何实际价值。还是……
当你说它被分裂时。你的意思是变量的范围 被拆分或生成的 sql 查询被拆分
这是引用:
在许多情况下,该分隔线一侧的范围变量不能 与另一边的范围变量混合。 into 关键字 这是该 group-by 子句的一部分,用于链接或拼接 这个查询的两半。因此,它标志着中间的边界 范围变量通常无法爬升的查询。这 into 关键字上方的范围变量在最后一个超出范围 此查询的一部分。
我的问题是两半是否仍被视为单个查询,因此整个查询仍仅包含三个部分。如果是这种情况,那么在我的代码示例中(在 d 下)) group 子句是正文的一部分。但是如果两半都被认为是两个查询,那么这两个查询中的每一个都将由三个部分组成
2。回复机器人寿司:
您的这部分查询被评估为一个数据拉取。
我不熟悉“数据拉取”这个术语,所以我猜你想说的是查询的前半部分作为一个单元执行/评估,然后是后半部分查询从前半部分获取结果并在其执行/评估中使用结果?换句话说,从概念上讲,我们有两个查询?
【问题讨论】:
-
关于你最后一个问题,什么是“身体”?
-
Book 将查询分为三部分(from 子句、body(let/from/orderby/where 子句所在的位置)和 final 子句,可以是组或 select 子句)。
-
当你说它被分裂时。你的意思是变量的范围被拆分还是生成的sql查询被拆分?
-
您对按返回类型分组是正确的。我只是想让您了解项目现在处于嵌套序列中,因此它们超出了范围。我已经更新了我的答案。