Linq Aggregate 使用嵌套类生成字符串
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))));
Grandparents 是一个有两个成员的类:
string Grandparent
List<Parent> Parents
Parents 是一个有两个成员的类:
string Parent
List<Child> Children
Child 是一个有两个成员的类:
string Name
int Age
我想使用 Linq 生成一个字符串,我将写入文本文件,例如:
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 的 IEnumerable 的 IEnumearable。我只想产生一个“字符串”
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
只需使用
SelectMany()
展平序列并使用string.Join()
进行聚合:just flatten the sequence using
SelectMany()
and usestring.Join()
to aggregate:试试这个:
无论如何,我建议您使用
File.WriteAllLines
保存文本文件,而不是使用 Aggregate:Try this:
Anyway, instead of using Aggregate, I suggest you to save your text file using
File.WriteAllLines
:上面的查询将返回一个
IEnumerable>
,其中每个元素代表祖父母,每个元素中的每个字符串代表每个父母的聚合。虽然您可以将其转换为第二个聚合,但这似乎是为了使用 LINQ 而使用 LINQ。使用
StringBuilder
并迭代您的集合会更好。您将生成仅比 LINQ 查询稍长的代码,并且可以更轻松地了解实际发生的情况。由于您的查询没有定义它,我不确定您希望如何合并每个父级的结果。如果您能澄清这一点,我将更新此答案以反映这一点。
The above query is going to return an
IEnumerable<IEnumerable<string>>
, where each element represents a grandparent, and each of the strings within each element represent your aggregate for each parent.While you could transform this into a second aggregate, this seems like using LINQ for the sake of using LINQ. You would be much better off using a
StringBuilder
and just iterating over your collection. You'll produce code that is only slightly longer than your LINQ query, and it will be much easier to see what's actually going on.Since your query doesn't define it, I'm not certain how you want to combine the results from each parent. If you can clarify that, I'll update this answer to reflect that.