在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 获取特定的嵌套元素? [复制]