首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Linq从列表中提取此数据?

如何使用Linq从列表中提取此数据?
EN

Stack Overflow用户
提问于 2012-02-29 20:13:40
回答 1查看 112关注 0票数 1

我有一个列表,列出了以下内容:

代码语言:javascript
复制
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到多个日志条目。

现在,我尝试以以下格式获得结果。

代码语言:javascript
复制
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排序的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-29 20:18:17

我认为你想要:

代码语言:javascript
复制
IList<LogEntries> logEntries = games.SelectMany(game => game.LogEntries ?? Enumerable.Empty<LogEntry>())
                                    .OrderBy(logEntry => logEntry.Id)
                                    .ToList();

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

您也可以在查询语法中执行此操作:

代码语言:javascript
复制
var logEntries = from game in games
                 from logEntry in game.LogEntries ?? Enumerable.Empty<LogEntry>()                  
                 orderby logEntry.Id
                 select logEntry;

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

但就我个人而言,我会更改Game类型,这样它的LogEntries属性永远不会是null,所以您不需要像上面那样使用null过滤技巧。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9498976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档