我有一个客户列表,我只想返回客户名称(加入姓名和姓氏)。可以使用以下Linq轻松完成:
return customers.Select(a => string.Format("{0} {1}", a.Forename, a.Surname).First();
如果我理解正确的话,“选择”只会针对声明所要求的行运行。因此对于上面的代码,而不是选择构建字符串列表并且仅使用第一个字符串(抛弃其他字符串),select语句仅针对第一行运行(由.First()要求)然后终止,因此仅是否为一行构建了字符串(第一行返回)。这是对的吗?
显然在.Select()和.First之间放置一个“.ToList()”将导致它构建一个字符串列表然后只取第一个,但是上面的Linq可以有任何其他方式最后做了太多的工作?这是我认为我应该已经确定答案的事情,但最好确认一下。
答案 0 :(得分:5)
[...]所以只有一行的字符串构建(第一行返回)。这是对的吗?
这是正确的。
显然在.Select()和.First之间放置一个“.ToList()”将导致它构建一个字符串列表然后只取第一个
再次纠正。
上面的Linq还有其他任何方式可能会做太多的工作吗?
没有。你拥有的就是这么好。
我将First
放在一个新行上,这样就没有水平滚动,所以读者会注意到它被调用,因为它非常重要,但是没有必要更改代码。 / p>
答案 1 :(得分:1)
这是一个证明,你的代码可以做你想要的
http://dotnetfiddle.net/IGE7bN
当你使用'First'时,来自'select'的表达只调用一次。