Конвертировать цикл foreach с повторителем в linq - PullRequest
0 голосов
/ 13 января 2012

Как мне конвертировать приведенный ниже код в LINQ

foreach (RepeaterItem ri in rptNews.Items)
            {
                HiddenField hdnUserId = (HiddenField)ri.FindControl("hdnId");
                int userId = Users.Current.UserId;
                if (Convert.ToInt32(hdnUserId.Value) != userId)
                {
                    ((ImageButton)ri.FindControl("img1")).Visible = false;
                    ((ImageButton)ri.FindControl("img2")).Visible = false;

                }

            }

Также, пожалуйста, подскажите, как мне научиться переводить этот вид кода в linq.

Ответы [ 3 ]

3 голосов
/ 13 января 2012

Linq предназначен для выбора подмножества данных, а не только итерации по коллекции. В вашем примере вы ничего не выбираете, вы просто просматриваете коллекцию. Linq - не тот инструмент, который вы пытаетесь достичь.

Что касается вашего комментария о том, что Linq быстрее , запрос linq в конечном итоге будет сводиться к серии операторов for и if, как только компилятор сработает, поэтому я сомневаюсь, что это будет быстрее, чем вы foreach, даже если вы можете использовать его без select предложения.

1 голос
/ 13 января 2012

Поскольку вы просили об этом, найдите его ниже:

foreach (RepeaterItem ri in from RepeaterItem ri in rptNews.Items let hdnUserId = (HiddenField)ri.FindControl("hdnId") let userId = Users.Current.UserId where Convert.ToInt32(hdnUserId.Value) != userId select ri)
            {
                ((ImageButton)ri.FindControl("img1")).Visible = false; 
                ((ImageButton)ri.FindControl("img2")).Visible = false;
            } 
1 голос
/ 13 января 2012

Я нашел руководство 101 LINQ Samples по MSDN очень полезным при изучении LINQ.

Посмотрите на примеры и попробуйте переписать вышеупомянутый запрос самостоятельно - это единственный способ учиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...