我正在刷新LINQ,并试图理解let和使用into关键字之间的区别.到目前为止,就我的理解而言,let关键字似乎比关键字更好into.
该into关键字实质上允许在投影后继续查询.(只是想明确说明我不是指组连接的那个.)
给定一系列名称,它允许人们执行以下操作:
var intoQuery =
from n in names
select Regex.Replace(n, "[aeiou]", "")
into noVowel
where noVowel.Length > 2
select noVowel;
Run Code Online (Sandbox Code Playgroud)
它需要选择的结果,并将其放置到noVowel变量,然后允许一个引入额外的where,orderby和select条款.一旦noVowel变量被创建,该n变量不再可用.
该let关键字,而另一方面,使用温度匿名类型,让你在同一时间重复使用一个以上的变量.
您可以执行以下操作:
var letQuery =
from n in names
let noVowel = Regex.Replace(n, "[aeiou]", "")
where noVowel.Length > 2
select noVowel;
Run Code Online (Sandbox Code Playgroud)
这两个noVowel和n变量都可以使用(即使我在这种情况下没有使用它).
虽然我可以看到差异,但我不太明白为什么人们会想要在into关键字上使用let关键字,除非明确要确保以前的变量不能在查询的后半部分使用.
那么,两个关键词存在的原因是否存在?
Jon*_*eet 83
是的,因为正如你所说,他们正在做不同的事情.
select ... into有效隔离整个查询,并允许您将其用作新查询的输入.就个人而言,我通常喜欢通过两个变量来做到这一点:
var tmp = from n in names
select Regex.Replace(n, "[aeiou]", "");
var noVowels = from noVowel in tmp
where noVowel.Length > 2
select noVowel;
Run Code Online (Sandbox Code Playgroud)
(不可否认,在这种情况下,我会用两行中的点符号来做,但忽略了......)
通常你不想要查询的前面部分的全部行李-这是当您使用select ... into或一分为二的查询按照上面的例子.这不仅意味着查询的早期部分不应该使用它们,它简化了正在发生的事情 - 当然这意味着每一步都可能进行更少的复制.
在另一方面,当你不希望保留的背景下休息,let更有意义.
| 归档时间: |
|
| 查看次数: |
26505 次 |
| 最近记录: |