用linq中的中继器转换foreach循环

本文关键字:转换 foreach 循环 中继器 linq | 更新日期: 2023-09-27 18:20:23

如何在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。

用linq中的中继器转换foreach循环

Linq旨在选择数据的子集,而不仅仅是在集合上迭代。在您的示例中,您没有选择任何内容,只是在循环一个集合。Linq不是你想要达到的目标的正确工具。

关于您关于Linq速度的评论,一旦编译器发挥了它的魔力,Linq查询最终将归结为一系列forif语句,所以我怀疑它是否会比foreach快,即使您可以在没有select子句的情况下使用它。

我发现MSDN上的101 LINQ示例指南在学习LINQ时非常有用。

看看这些例子,试着自己重写上面的问题——这是学习的唯一方法。

既然你要求它,请在下面找到它:

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;
            }