C# 在linq中使用中继器转换foreach循环
如何在LINQ中转换以下代码C# 在linq中使用中继器转换foreach循环,c#,linq,.net-4.0,foreach,C#,Linq,.net 4.0,Foreach,如何在LINQ中转换以下代码 foreach (RepeaterItem ri in rptNews.Items) { HiddenField hdnUserId = (HiddenField)ri.FindControl("hdnId"); int userId = Users.Current.UserId; if (Convert.ToInt32(hdnUserId.Val
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时,我发现MSDN指南非常有用
看看这些例子,自己重新编写上面的查询——这是学习的唯一方法 学习LINQ时,我发现MSDN指南非常有用
看看这些例子,自己重新编写上面的查询——这是学习的唯一方法 Linq旨在选择数据的子集,而不仅仅是在集合上迭代。在您的示例中,您没有选择任何内容,只是在集合中循环。Linq不是您想要实现的目标的正确工具
关于您关于Linq更快的评论,Linq查询最终将归结为一系列
for
和if
语句,一旦编译器发挥了它的魔力,因此,我怀疑它是否会比您的foreach
更快,即使您可以在不使用select
子句的情况下使用它。Linq的目的是选择数据的子集,而不仅仅是在集合上迭代。在您的示例中,您没有选择任何内容,只是在集合中循环。Linq不是您想要实现的目标的正确工具
关于你关于Linq更快的评论,一旦编译器发挥了它的神奇作用,Linq查询最终将归结为一系列
for
和if
语句,因此我怀疑它会比你foreach
更快,即使你可以不用select
子句使用它。既然你要求它,请在下面找到:
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;
}
既然是您要求的,请在下面查找:
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;
}
为什么要将此代码“翻译”为LINQ?现在看起来很好。LINQ并不是每个问题的解决方案。如果您现在拥有的是可读性和足够快的,那么LINQ是否更快无关紧要。鉴于LINQ不是用于产生副作用的,您确实应该在某个地方循环。@Zerotoinfinite LINQ不比foreach或for循环快@Zerotoinfinite,
foreach
完成作业。您可以将其重构为LINQ查询,对其应用ToList()
,并将lambda传递给结果列表的ForEach()
方法,但最终结果可能会执行相同的操作,并且可读性较差。为什么要将此代码“翻译”为LINQ?现在看起来很好。LINQ并不是每个问题的解决方案。如果您现在拥有的是可读性和足够快的,那么LINQ是否更快无关紧要。鉴于LINQ不是用于产生副作用的,您确实应该在某个地方循环。@Zerotoinfinite LINQ不比foreach或for循环快@Zerotoinfinite,foreach
完成作业。您可以将其重构为LINQ查询,对其应用ToList()
,并将lambda传递给结果列表的ForEach()
方法,但最终结果可能会执行相同的操作,只是可读性较差。