C# Linq聚合以生成具有嵌套类的字符串

C# Linq聚合以生成具有嵌套类的字符串,c#,linq,C#,Linq,祖父母是一个有两名成员的班级: var outline = Grandparents.Select( x => x.Parents.Select( y => y.Children.Aggregate(string.Empty, (current, child) => string.Format("{0}{1},{2},{3},{4}\n", current, x.Grandparent,

祖父母是一个有两名成员的班级:

var outline = Grandparents.Select(
    x =>
    x.Parents.Select(
        y =>
        y.Children.Aggregate(string.Empty, (current, child) => string.Format("{0}{1},{2},{3},{4}\n",
            current, x.Grandparent,
            y.Parent,
            child.Name,
            child.Age))));
string Grandparent
List<Parent> Parents
string Parent
List<Child> Children
我想使用Linq生成一个我将在文本文件中写入的字符串,例如:

string Name
int Age

上面的代码生成一个IEnumerable of IEnumerable of String。我只想生成一个“字符串”

上面的查询将返回一个
IEnumerable
,其中每个元素表示一个祖辈,每个元素中的每个字符串表示每个父代的聚合

虽然可以将其转换为第二个聚合,但这似乎是为了使用LINQ而使用LINQ。使用
StringBuilder
并在集合中进行迭代会更好。您将生成只比LINQ查询稍长的代码,并且更容易看到实际发生的情况


因为您的查询没有定义它,所以我不确定您希望如何组合来自每个父级的结果。如果您可以澄清这一点,我将更新此答案以反映这一点。

上述查询将返回一个
IEnumerable
,其中每个元素表示一个祖父母,每个元素中的每个字符串表示您对每个父代的聚合

虽然可以将其转换为第二个聚合,但这似乎是为了使用LINQ而使用LINQ。使用
StringBuilder
并在集合中进行迭代会更好。您将生成只比LINQ查询稍长的代码,并且更容易看到实际发生的情况


因为您的查询没有定义它,所以我不确定您希望如何组合来自每个父级的结果。如果您能澄清这一点,我将更新此答案以反映这一点。

只需使用
SelectMany()
将序列展平,然后使用
string.Join()
进行聚合:

Grandpa Walter, Parent William, Child Chris, Age 11
Grandpa Walter, Parent Sue, Child Alice, Age 7
Grandpa Walter, Parent Sue, Child Sam, Age 7
Grandpa Eugene, Parent David, Child Joe, Age 17

只需使用
SelectMany()
展平序列,然后使用
string.Join()
聚合:

Grandpa Walter, Parent William, Child Chris, Age 11
Grandpa Walter, Parent Sue, Child Alice, Age 7
Grandpa Walter, Parent Sue, Child Sam, Age 7
Grandpa Eugene, Parent David, Child Joe, Age 17
试试这个:

string result =  string.Join(Environment.NewLine, outline.SelectMany( x=>x));
无论如何,我建议您使用
file.writeAllines
保存文本文件,而不是使用聚合:

string result = (from grandParent in grandParents
                 from parent in grandParent.Parents
                 from child in parent.Children
                 select string.Format("{0}, {1}, {2}, {3}", grandParent.Name, parent.Name, child.Name, child.Age))
                .Aggregate((a, b) => a + Environment.NewLine + b);
试试这个:

string result =  string.Join(Environment.NewLine, outline.SelectMany( x=>x));
无论如何,我建议您使用
file.writeAllines
保存文本文件,而不是使用聚合:

string result = (from grandParent in grandParents
                 from parent in grandParent.Parents
                 from child in parent.Children
                 select string.Format("{0}, {1}, {2}, {3}", grandParent.Name, parent.Name, child.Name, child.Age))
                .Aggregate((a, b) => a + Environment.NewLine + b);

否,此查询返回一个
IEnumerable
(两个嵌套选择)否,此查询返回一个
IEnumerable
(两个嵌套选择)是否可以显示应生成此输出的输入?是否可以显示应生成此输出的输入?