我试图将嵌套对象展平,如下所示:

public class Book
{
    public string Name { get; set; }
    public IList<Chapter> Chapters { get; set; }
}

public class Chapter
{
    public string Name { get; set; }
    public IList<Page> Pages { get; set; }
}


public class Page
{
    public string Name { get; set; }
}

让我举个例子.这是我手上的数据

Book: Pro Linq 
{ 
   Chapter 1: Hello Linq 
   {
      Page 1, 
      Page 2, 
      Page 3
   },
   Chapter 2: C# Language enhancements
   {
      Page 4
   },
}

我想要的结果是以下简单列表:

"Pro Linq", "Hello Linq", "Page 1"
"Pro Linq", "Hello Linq", "Page 2"
"Pro Linq", "Hello Linq", "Page 3"
"Pro Linq", "C# Language enhancements", "Page 4"

我怎样才能做到这一点?我可以用select new分来做,但有人告诉我,一个SelectMany就足够了.

推荐答案

myBooks.SelectMany(b => b.Chapters
    .SelectMany(c => c.Pages
        .Select(p => b.Name + ", " + c.Name + ", " + p.Name)));

.net相关问答推荐

PowerShell中窗体定时器和系统定时器的统一处理

F#:跨度、提升和底部类型(或缺乏)

双精度的 C++ 和 C# 十六进制值之间的差异

如何找到windows服务exe路径

关于在 .NET 中干净地终止线程的问题

在 C# 中生成随机小数

如何使用 C# 中的代码更改网络设置(IP 地址、DNS、WINS、主机名)

.NET 的 `Array.Sort()` 方法使用的排序算法是稳定的算法吗?

ReaderWriterLock 与锁{}

如何将 UI Dispatcher 传递给 ViewModel

如何让 .NET 的 Path.Combine 将正斜杠转换为反斜杠?

DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") 返回上午时间而不是下午时间?

日期时间是什么意思?在 C# 中是什么意思?

是否有 Linq 方法可以将单个项目添加到 IEnumerable

如何使我的托管 NuGet 包支持 C++/CLI 项目?

使用 C# 设置全局热键

CI服务器的比较?

如何从头开始以编程方式配置 log4net(无配置)

说明 C# 中 volatile 关键字的用法

Uri.Host 和 Uri.Authority 有什么区别