Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在linq中使用中继器转换foreach循环_C#_Linq_.net 4.0_Foreach - Fatal编程技术网

C# 在linq中使用中继器转换foreach循环

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

如何在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时,我发现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()
方法,但最终结果可能会执行相同的操作,只是可读性较差。