gpt4 book ai didi

c# - LINQ lambda 表达式,查找属性为 == X 的子对象

转载 作者:行者123 更新时间:2023-11-30 14:30:18 25 4
gpt4 key购买 nike

需要有关 C# 中 LINQ lambda 表达式的帮助。

那么让我解释一下我的对象的结构。

RootObject 是一个集合(具有多个属性的自定义类),它具有许多属性,其中之一是 List<Item>项目。项目包含 List<Round>回合。回合包含 EntryRID (此 ID 是唯一的)和 name .

string = IDToFind = "111"; //The ID i want a Round object for 

因此,我需要从我的“项目”列表中找到与给定 ID (IDToFind) 匹配的 Round ID。也就是我需要在“items”中搜索每个单独的 Item 以查找 ID 与 IDToFind 匹配的 Round 对象。

我已经厌倦了这个表达:

Round playerRound = RootObject.Select(i => i.Items.Select(x => x.Rounds.Where(y => y.EntryRID == Int32.Parse(IDToFind))));

但它不返回任何类型的对象,它返回:

System.Linq.Enumerable+WhereSelectListIterator`2[Leaderboards,System.Collections.Generic.IEnumerable`1[System.Collections.Generic.IEnumerable`1[Round]]]

最佳答案

听起来你想要这样的东西:

// Parse the target ID *once* rather than all the time...
var targetId = int.Parse(IDToFind);
var playerRound = RootObject.SelectMany(i => i.Items)
.SelectMany(x => x.Rounds)
.Where(round => round.EntryRID == targetId)
.First();

这将返回第一个 匹配Round,如果没有则抛出异常。您可以使用 FirstOrDefault,如果没有匹配的对象,它将返回 null,或者可以使用 Single() 来确保 一个结果。

作为一个查询表达式,你可以把上面的写成:

var targetId = int.Parse(IDToFind);
var playerRound = (from foo in RootObject // You haven't told us this type
from item in foo.Items
from round in item.Rounds
where round.EntryRID == targetId
select round).First();

关于c# - LINQ lambda 表达式,查找属性为 == X 的子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23783843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com