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