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
(两个嵌套选择)是否可以显示应生成此输出的输入?是否可以显示应生成此输出的输入?