在c#中使用lambda获取嵌套列表中的特定元素

Posted

技术标签:

【中文标题】在c#中使用lambda获取嵌套列表中的特定元素【英文标题】:Get the specific element in nested list using lambda in c# 【发布时间】:2015-03-21 00:13:52 【问题描述】:

好日子,

假设我有一个静态 List<AClass> 对象(我们将其命名为 myStaticList),其中包含另一个列表,并且该列表包含另一个具有 CId 和 Name 属性的列表。

我需要做的是

foreach(AClass a in myStaticList)

   foreach(BClass b in a.bList)
   
      foreach(CClass c in b.cList)
      
        if(c.CId == 12345)
        
           c.Name = "Specific element in static list is now changed.";
        
      
   

我可以使用 LINQ Lambda 表达式实现这一点吗?

类似的东西;

myStaticList
.Where(a=>a.bList
.Where(b=>b.cList
.Where(c=>c.CId == 12345) != null) != null)
.something logical
.Name = "Specific element in static list is now changed.";

请注意,我想更改静态列表中该特定项目的属性。

【问题讨论】:

Linq nested list expression 的可能重复项 【参考方案1】:

您需要SelectMany 来扁平化您的列表:

var result = myStaticList.SelectMany(a=>a.bList)
                         .SelectMany(b => b.cList)
                         .FirstOrDefault(c => c.CId == 12345);

if(result != null)
    result.Name = "Specific element in static list is now changed.";;

【讨论】:

【参考方案2】:

使用SelectMany(优秀帖子here)

var element = myStaticList.SelectMany(a => a.bList)
                          .SelectMany(b => b.cList)
                          .FirstOrDefault(c => c.CId == 12345);

if (element != null )
  element.Name = "Specific element in static list is now changed.";

【讨论】:

【参考方案3】:
var item = (from a in myStaticList
           from b in a.bList
           from c in b.cList
           where c.CID = 12345
           select c).FirstOrDefault();
if (item != null)

    item.Property = "Something new";

您也可以使用 SelectMany,但这并不简单。

【讨论】:

以上是关于在c#中使用lambda获取嵌套列表中的特定元素的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# ASP.Net 从 XML 文档中获取特定 XML 元素的列表?

如何在具有 xmlns 属性的 xml 中使用 xpath 获取特定的嵌套元素? [复制]

C#确定列表中的重复项[重复]

JWT:如何从声明中的特定键获取值列表。 C# Asp.Net 核心

如何在嵌套列表的每个子列表中指定特定元素的索引?

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