我有一个列表,列出了以下内容:
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排序的。
发布于 2012-02-29 20:18:17
我认为你想要:
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过滤技巧。
https://stackoverflow.com/questions/9498976
复制相似问题