C# 这个LINQ最终会做太多的工作吗?

C# 这个LINQ最终会做太多的工作吗?,c#,linq,C#,Linq,我有一个客户列表,我只想返回客户名称(加入名字和姓氏)。可以使用以下Linq轻松完成: return customers.Select(a => string.Format("{0} {1}", a.Forename, a.Surname).First(); 如果我理解正确,“Select”将只对正确的语句所要求的行运行。因此,对于上面的代码,select语句只对第一行(由.first()要求)运行,然后终止,而不是选择构建字符串列表并仅使用第一行(丢弃其他行),因此仅对一行(返回的第一

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

return customers.Select(a => string.Format("{0} {1}", a.Forename, a.Surname).First();
如果我理解正确,“Select”将只对正确的语句所要求的行运行。因此,对于上面的代码,select语句只对第一行(由.first()要求)运行,然后终止,而不是选择构建字符串列表并仅使用第一行(丢弃其他行),因此仅对一行(返回的第一行)执行字符串构建。对吗

显然,在.Select()和.First之间放置一个“.ToList()”,将导致它构建一个字符串列表,然后只获取第一个字符串,但是上面的Linq是否还有其他方法会导致做太多工作?这是我觉得我应该已经确定的答案,但最好确认一下

[…]因此只为一行生成字符串(返回的第一行)。对吗

这是正确的

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

请再说一遍

有没有其他方法可以让上面的Linq完成太多的工作

不,你的一切都很好


我会把
放在新行的第一行,这样就不会有水平滚动,这样读者就会注意到它被调用了,因为这很重要,但不需要更改代码。

这里有一个证明,你的代码可以做你想要的。


当您使用“First”时,“select”中的表达式仅调用一次。

select返回一个
IEnumerable
,该表达式仅在需要时才进行延迟计算。在代码段中,您可以看到,Console.WriteLine仅对First执行一次。如果你看OP的问题,OP只需要问一个问题,证明他理解的都是正确的。因此,所有这些都是正确的:)