不使用GroupJoin:
var playersDictionary = players.ToDictionary(player => player.Id,
element => new PlayerDto { Rounds = new List<RoundDto>() });
foreach (var round in rounds)
{
PlayerDto playerDto;
playersDictionary.TryGetValue(round.PlayerId, out playerDto);
if (playerDto != null)
{
playerDto.Rounds.Add(new RoundDto { });
}
}
var playerDtoItems = playersDictionary.Values;
使用GroupJoin:
var playerDtoItems =
from player in players
join round in rounds
on player.Id equals round.PlayerId
into playerRounds
select new PlayerDto { Rounds = playerRounds.Select(playerRound => new RoundDto {}) };
这两件中的哪一件效率更高?
答案 0 :(得分:1)
没有测试,你真的不知道。根据经验,在LINQ中完成的任何事情都比手动完成的要慢。额外的迭代器和委托调用确实有它们的成本。
然而,对于大多数实际目的,我认为它们的性能相同。如果表现真的有所不同(即你处于一个非常关键的障碍,或者你注意到减速),你肯定想要衡量。
答案 1 :(得分:0)
你真的关心这种微观化吗?你的代码会稍微快一点,但只有当你处理大量数字时才会注意到。
破解反射器,看看groupJoin是如何工作的