Вопрос: так или иначе, эта LINQ может в конечном итоге сделать слишком много работы?


У меня есть список клиентов, для которых я просто хочу вернуть имя клиента (присоединяется к имени и фамилии). Можно легко сделать со следующим Linq:

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

Если я правильно понял вещи, то «Выбор» будет выполняться только для строк, требуемых оператором, чтобы это было правильно. Таким образом, для вышеприведенного кода вместо того, чтобы выделять строение списка строк и только используя первый (отбрасывая остальных), оператор select работает только для первой строки (требуется .First ()), а затем завершается, поэтому только строит строку для одной строки (первая возвращается). Это верно?

Очевидно, размещение «.ToList ()» между .Select () и .First приведет к тому, что он построит список строк, а затем возьмет только первый, но есть ли другой способ, которым вышеупомянутый Linq мог бы сделать слишком много работы? Это то, что я чувствую, что я должен быть уверен в ответе, но лучше всего это подтвердить.


4


источник


Ответы:


[...], так что строковое построение только для одной строки (первая возвращается). Это верно?

Это верно.

Очевидно, размещение «.ToList ()» между .Select () и .First приведет к тому, что он построит список строк, а затем возьмет только первый

Правильно.

есть ли другой способ, который вышеупомянутый Linq мог бы сделать слишком много работы?

Нет. У тебя все нормально.

Я бы поставил First на новой строке, просто нет горизонтальной прокрутки, и читатель заметит, что это называется, поскольку это довольно важно, но нет необходимости менять код.


5



Вот доказательство того, что ваш код делает то, что вы хотите.
http://dotnetfiddle.net/IGE7bN  
Выражение из «select» вызывает только один раз, когда u использует «First».


1