我有以下列表:
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/