Pull to refresh

LINQ: еще один вариант использования

Reading time2 min
Views4.6K
LINQ – замечательная вещь, которая обладает огромным потенциалом. Всем заинтересованным программистам известны LINQ to SQL или LINQ to XML. Я бы хотел расширить этот список и привести простейший пример другого применения LINQ.

Возьмем для примера такой элемент управления asp.net как CheckBoxList. Этот элемент позволяет вывести набор checkbox'ов объединенных каким-то общим смыслом. Например, мы можем вывести список банков, дав пользователю возможность создать необходимый в некотором контексте набор.
          <asp:CheckBoxList ID=«cblBanks» runat=«server»>
          </asp:CheckBoxList>
          <asp:SqlDataSource ID=«dsBanks» runat=«server»
            ConnectionString="<%$ ConnectionStrings:SampleConnectionString %>"
            SelectCommand=«SELECT b.id, b.shortName FROM Banks b»>
          </asp:SqlDataSource>
    cblBanks.DataSource = dsBanks;    cblBanks.DataValueField = «id»;    cblBanks.DataTextField = «shortName»;    cblBanks.DataBind();

* This source code was highlighted with Source Code Highlighter.


Задача будет состоять в том, чтобы получить список идентификаторов банков, которые выбрал пользователь. В простейшем случае мы могли бы пробежаться по коллекции элементов и выбрать те, которые отметил пользователь. Но LINQ позволяет сделать этот процесс еще проще:
    var Banks = cblBanks.Items.Cast<ListItem>()                .Where(x => x.Selected == true)                .Select(y => Convert.ToInt32(y.Value));* This source code was highlighted with Source Code Highlighter.

Очень просто и элегантно, не находите? Хотел бы заметить, что LINQ может пригодится для похожей работы не только с элементами управления, но и с любой не generic коллекцией через Enumerable.Cast(TResult) или схожий метод Enumerable.OfType(TResult).

PS: «в статье нет ошибок!» — к сожалению утверждать этого невозможно, но я буду рад, если вы обратите мое внимание на найденную вами ошибку.
Tags:
Hubs:
+14
Comments31

Articles