用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旨在选择数据的子集,而不仅仅是在集合上迭代。在您的示例中,您没有选择任何内容,只是在循环一个集合。Linq不是你想要达到的目标的正确工具。
关于您关于Linq速度快的评论,一旦编译器发挥了它的魔力,Linq查询最终将归结为一系列for
和if
语句,所以我怀疑它是否会比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;
}