Linq 到嵌套列表

Posted

技术标签:

【中文标题】Linq 到嵌套列表【英文标题】:Linq to Nested Lists 【发布时间】:2020-12-23 16:57:47 【问题描述】:

在 LINQ 查询方面需要一点帮助。我有一个由组件和子组件组成的字符串。我还有一个 LINQ 查询,可以很好地将组件和子组件拆分为嵌套的通用列表。

List<List<string>> fields = (from a in text.Split(new char[]  '\r' )
                             select a.Split(new char[]  ',' ).ToList()).ToList();

我现在有一些子组件,它们自己的子组件用“-”分隔。如何修改上述代码以允许使用第三个分隔符的第三个嵌套列表。尝试了一些 LINQ 变体,但无法正常工作。我有非常基本的 LINQ 知识。提前致谢。

例子:

component1,component2,component3.1-component3.2-component3.3,component4
component1,component2,component3,component4.1-component4.2-component4.3,component5,component6.1-component6.2

【问题讨论】:

定义“子组件”。 请为您的String text 发布示例输入值。 当你有 3 层嵌套列表时,你可能做错了什么。 【参考方案1】:

您可以使用以下 Linq 查询来做到这一点

var fields = text.Split('\r')
    .Select(a => a.Split(',')
                  .Select(b => b.Split('-')
                                .ToList())
                  .ToList())
    .ToList();

或者在查询语法中

var fields = (from a in text.Split('\r')
              select (from b in a.Split(',')
                      select b.Split('-').ToList())
                     .ToList())
            .ToList();

请注意,您不必为 Split 方法创建数组,因为它被定义为 params 参数。

【讨论】:

以上是关于Linq 到嵌套列表的主要内容,如果未能解决你的问题,请参考以下文章

嵌套列表 Linq 返回 1 个最终列表 [重复]

CSharp使用另一个列表及其嵌套列表过滤带有LINQ查询的列表

如何使用 linq 查询具有嵌套列表的对象?

如何使用 LINQ 使用嵌套属性对列表进行排序

LINQ - 从嵌套列表中获取值的总数并保存在父列表中[重复]

使用 LINQ 根据 C# 中的属性值搜索嵌套在另一个列表中的列表中的项目?