Страницы

Поиск по вопросам

четверг, 18 апреля 2019 г.

о принципе работы into into

Здравствуйте. Не могу понять, когда именно данные сохраняются в ws ?
string[] websites = { "hsNameA.com", "hsNameB.net", "hsNameC.net", "hsNameD.com", "hsNameE.org", "hsNameF.org", "hsNameG.tv", "hsNameH.net", "hsNameI.tv" };
var webAddrs = from addr in websites group addr by addr.Substring(addr.LastIndexOf('.')) into ws where ws.Count()>2 select ws;
После группирования домена или в каждом шагу ? Не могу понять, какой последовательностью работают алгоритмы когда используются groupby и into.


Ответ

SQL-подобный синтаксис разворачивается в последовательный вызов методов расширений LiNQ. В некоторых случаях такой синтаксис легче читается, чем длинные цепочки вызова методов.
Ваш запрос можно переписать так:
var groups = websites.GroupBy(addr => addr.Substring(addr.LastIndexOf('.'))); var webAddrs = groups.Where(ws => ws.Count() > 2);
Таким образом видно, что сначала формируются все группы и, только после этого, происходит отбор нужных групп.
Если написать последовательность вызова одной строкой (без промежуточной переменной groups) и посмотреть на результат компиляции в IL-код (например в LINQPad), вы убедитесь, что это одно и тоже.

Комментариев нет:

Отправить комментарий