如何使用Linq从列表中提取此数据?
问题描述:
我有以下的列表..如何使用Linq从列表中提取此数据?
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
过滤体操像以上这样的。
当您发布(简化)类定义时,回答会变得更容易。 – 2012-02-29 12:18:51