gpt4 book ai didi

c# - 如何使用 Linq 从列表中提取这些数据?

转载 作者:太空宇宙 更新时间:2023-11-03 18:40:29 26 4
gpt4 key购买 nike

我有以下列表:

Id: Game-1
GameType: Battlefield3
LogEntries: (an IList<LogEntry>)
- Id: 1, Foo: Blah blah blah..
- Id: 231, Foo: Blah blah blah..
- Id: 342321, Foo: Blah blah blah..

Id: Game-2
GameType: Battlefield3
LogEntries: null

Id: Game-1
GameType: Battlefield3
LogEntries: (an IList<LogEntry>)
- Id: 2121, Foo: Blah blah blah..
- Id: 21333321, Foo: Blah blah blah..

等因此每个游戏服务器可以有 0 到多个日志条目。

现在,我正在尝试以下列格式获取结果。

IList<LogEntries> logEntries = <some linq magic>

Id: 1, Foo: Blah blah blah..
Id: 231, Foo: ....
Id: 2121, Foo: ....
Id: 342321, Foo: ....
Id: 342321, Foo: ....

因此日志条目按 Id 排序。

最佳答案

我想你想要:

IList<LogEntries> logEntries = games.SelectMany(game => game.LogEntries ?? Enumerable.Empty<LogEntry>())
.OrderBy(logEntry => logEntry.Id)
.ToList();

这里的关键是 SelectMany 运算符,它将每个游戏映射到它的日志条目,并将日志条目序列展平到一个简单的日志条目序列。

您也可以在查询语法中这样做:

var logEntries = from game in games
from logEntry in game.LogEntries ?? Enumerable.Empty<LogEntry>()
orderby logEntry.Id
select logEntry;

(您可以在上面调用ToList() 将查询具体化为列表)。

但就个人而言,我会更改 Game 类型,使其 LogEntries 属性永远不会为 null,因此您不需要求助于 null 像上面那样过滤体操。

关于c# - 如何使用 Linq 从列表中提取这些数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9498976/

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