当前位置:  开发笔记 > 编程语言 > 正文

linq的let关键字比关键字更好吗?

如何解决《linq的let关键字比关键字更好吗?》经验,为你挑选了2个好方法。

我正在刷新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;

它需要选择的结果,并将其放置到noVowel变量,然后允许一个引入额外的where,orderbyselect条款.一旦noVowel变量被创建,该n变量不再可用.

let关键字,而另一方面,使用温度匿名类型,让你在同一时间重复使用一个以上的变量.

您可以执行以下操作:

var letQuery =
  from n in names
  let noVowel = Regex.Replace(n, "[aeiou]", "")
  where noVowel.Length > 2
  select noVowel;

这两个noVoweln变量都可以使用(即使我在这种情况下没有使用它).

虽然我可以看到差异,但我不太明白为什么人们会想要在into关键字上使用let关键字,除非明确要确保以前的变量不能在查询的后半部分使用.

那么,两个关键词存在的原因是否存在?



1> Jon Skeet..:

是的,因为正如你所说,他们正在做不同的事情.

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;

(不可否认,在这种情况下,我会用两行中的点符号来做,但忽略了......)

通常你不想要查询的前面部分的全部行李-这是当您使用select ... into或一分为二的查询按照上面的例子.这不仅意味着查询的早期部分不应该使用它们,它简化了正在发生的事情 - 当然这意味着每一步都可能进行更少的复制.

在另一方面,当你希望保留的背景下休息,let更有意义.


一个或另一个的使用是否会影响生成的SQL?

2> leppie..:

主要区别在于let将变量注入上下文/范围,into从而创建新的上下文/范围.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有