无论如何,这个LINQ最终可能会做太多的工作?

时间:2014-01-28 18:36:17

标签: c# linq

我有一个客户列表,我只想返回客户名称(加入姓名和姓氏)。可以使用以下Linq轻松完成:

return customers.Select(a => string.Format("{0} {1}", a.Forename, a.Surname).First();

如果我理解正确的话,“选择”只会针对声明所要求的行运行。因此对于上面的代码,而不是选择构建字符串列表并且仅使用第一个字符串(抛弃其他字符串),select语句仅针对第一行运行(由.First()要求)然后终止,因此仅是否为一行构建了字符串(第一行返回)。这是对的吗?

显然在.Select()和.First之间放置一个“.ToList()”将导致它构建一个字符串列表然后只取第一个,但是上面的Linq可以有任何其他方式最后做了太多的工作?这是我认为我应该已经确定答案的事情,但最好确认一下。

2 个答案:

答案 0 :(得分:5)

  

[...]所以只有一行的字符串构建(第一行返回)。这是对的吗?

这是正确的。

  

显然在.Select()和.First之间放置一个“.ToList()”将导致它构建一个字符串列表然后只取第一个

再次纠正。

  

上面的Linq还有其他任何方式可能会做太多的工作吗?

没有。你拥有的就是这么好。

我将First放在一个新行上,这样就没有水平滚动,所以读者会注意到它被调用,因为它非常重要,但是没有必要更改代码。 / p>

答案 1 :(得分:1)

这是一个证明,你的代码可以做你想要的 http://dotnetfiddle.net/IGE7bN
当你使用'First'时,来自'select'的表达只调用一次。