如何使用Linq而不是foreach从嵌套集中获取项?

如何使用Linq而不是foreach从嵌套集中获取项?,linq,foreach,Linq,Foreach,我有多个嵌套的foreach循环进行一些处理,如何将此表达式转换为Linq slug.Text=”“; foreach(slugItem.script中的var脚本){ foreach(script.body中的变量body){ foreach(body.vo中的变量vo){ foreach(vo.content中的变量内容){ foreach(content.text中的var text){ slug.Text=string.Format(“{0}\n{1}”,slug.Text,Text.V

我有多个嵌套的foreach循环进行一些处理,如何将此表达式转换为Linq

slug.Text=”“;
foreach(slugItem.script中的var脚本){
foreach(script.body中的变量body){
foreach(body.vo中的变量vo){
foreach(vo.content中的变量内容){
foreach(content.text中的var text){
slug.Text=string.Format(“{0}\n{1}”,slug.Text,Text.Value);
} } } } }

为什么要使用Linq,它会添加什么?但是,我会使用
StringBuilder

var slugtext = new StringBuilder();

foreach (var script in slugItem.script) 
{   
    foreach (var body in script.body) 
    {    
        foreach (var vo in body.vo) 
        {     
            foreach (var content in vo.content)
            {      
                foreach (var text in content.text)
                {       
                    slugText.AppendLine(text.Value);
                }
            }
        }
    }
}

 slug.Text = slugText.ToString();

为什么要使用Linq,它会增加什么?但是,我会使用
StringBuilder

var slugtext = new StringBuilder();

foreach (var script in slugItem.script) 
{   
    foreach (var body in script.body) 
    {    
        foreach (var vo in body.vo) 
        {     
            foreach (var content in vo.content)
            {      
                foreach (var text in content.text)
                {       
                    slugText.AppendLine(text.Value);
                }
            }
        }
    }
}

 slug.Text = slugText.ToString();

出于好奇。。。为什么?除了嵌套循环的数量之外,这段代码本质上有什么问题?从更“干净的代码”的角度来看,我可能会用函数调用的嵌套替换这些循环,这样顶级代码只需要调用单个函数。但除此之外,这是非常清晰可读的。@AakashM但它在每次重新分配中使用
slug.Text
string.format
使用先前的
slug.Text
值,因此所有循环迭代对最终结果都很重要result@MarcinJuraszek,很明显,我第一次(现在已删除)时错过了这一点回答。出于好奇。。。为什么?除了嵌套循环的数量之外,这段代码本质上有什么问题?从更“干净的代码”的角度来看,我可能会用函数调用的嵌套替换这些循环,这样顶级代码只需要调用单个函数。但除此之外,这是非常清晰可读的。@AakashM但它在每次重新分配中使用
slug.Text
string.format
使用先前的
slug.Text
值,因此所有循环迭代对最终结果都很重要result@MarcinJuraszek,很明显,我第一次(现在已删除)时错过了这一点答:这完全符合问题的要求。但在更实际的层面上,我不建议使用此代码而不是原始代码
.SelectMany
只是没有foreach那样一目了然易读,而且在阅读时需要额外的一两分钟才能理解这段代码。我同意:)但问题就在于它的意思,这不是用户第一次想过度设计堆栈溢出,通常做一些他们不应该做的事情:)我认为linq结果的顺序是不确定的,除非有说明。在实践中,这可能会产生与OP代码相同的结果。这肯定符合问题的规定要求。但在更实际的层面上,我不建议使用此代码而不是原始代码
.SelectMany
只是没有foreach那样一目了然易读,而且在阅读时需要额外的一两分钟才能理解这段代码。我同意:)但问题就在于它的意思,这不是用户第一次想过度设计堆栈溢出,通常做一些他们不应该做的事情:)我认为linq结果的顺序是不确定的,除非有说明。在实践中,这可能会产生与操作代码相同的结果。这不会产生与原始代码完全相同的输出,尽管我认为它会提供更好的输出。这不会产生与原始代码完全相同的输出,尽管我认为它会提供更好的输出。