【问题标题】:LINQ on List with lot of nested List具有大量嵌套列表的列表上的 LINQ
【发布时间】:2013-09-11 08:44:13
【问题描述】:

我遇到了嵌套列表的问题。所以我有 3 节课:

public class Class1
{
   public string Name {get;set;}
   public List<Class2> Class2List {get;set;}
}
public class Class2
{
   public string Name {get;set;}
   public List<Class3> Class3List {get;set;}
}
public class Class3
{
   public string Name {get;set;}
}

我想从 Class1 中选择所有 Class3.Name 其中 Class2.Name = "something" 并且重要的是结果将是 IEnumerable string 。我该如何解决?

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    LINQ 表达式可以有多个嵌套的from 子句:

    // nested from clauses
    var names = from c1 in myClass1List
                from c2 in c1.Class2List
                where c2.Name == "something"
                from c3 in c2.Class3List
                select c3.Name;
    

    为了完整起见,这里有两个使用方法语法的变体:

    var names = myClass1List
        .SelectMany(c1 => c1.Class2List.Where(c2 => c2.Name == "something"))
        .SelectMany(c2 => c2.Class3List.Select(c3 => c3.Name));
    
    var names = myClass1List
        .SelectMany(c1 => c1.Class2List
            .Where(c2 => c2.Name == "something")
            .SelectMany(c2 => c2.Class3List
                .Select(c3 => c3.Name)));
    

    【讨论】:

    • 您也可以使用SelectMany添加此查询的方法语法版本,这将使答案更好)
    • @Eduard:感谢您的编辑,我使用 VB.NET 太久了。 ;-)
    • 感谢您的快速答复。解决方案是炉排。
    • 没问题。我相信每个人都明白:)。我自己背后有很长的德尔福历史。只是一些年轻的程序员可能会一个字一个字地看代码。
    • 非常感谢大家!
    【解决方案2】:
     List<string> listNames = Class1.Where(f => f.Class2List.Where(g => string.Compare(g.Name, "something") == 0)).Select(h => h.Name).ToList()
    

    【讨论】:

      猜你喜欢
      • 2018-08-10
      • 1970-01-01
      • 2021-11-17
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 2021-06-12
      • 1970-01-01
      相关资源
      最近更新 更多