Страницы

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

воскресенье, 9 февраля 2020 г.

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

#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), вы убедитесь, что это одно и тоже.

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

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