Здравствуйте. Не могу понять, когда именно данные сохраняются в 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), вы убедитесь, что это одно и тоже.
Комментариев нет:
Отправить комментарий