LINQ选择到词典

时间:2014-09-17 14:32:12

标签: c# linq

我正在尝试使用Select并将每个元素投影到Dictionary<string, UdpReceiveResult> 我目前只有一个Select,只是将Dictionary的值投射到tasks类型的列表UdpReceiveResultclientsDictionary<string, UdpClient>类型的字典。我有

var tasks = clients.Select(c => c.Value.ReceiveAsync()).OrderByCompletion();

我想将密钥和ReceiveAsync()结果投影到新的Dictionary中。 OrderByCompletion来自Nito.AsyncEx dll。

2 个答案:

答案 0 :(得分:43)

嗯,首先,您需要将结果包括在内:

var tasks = clients.Select(async c => new
{
    c.Key,
    Value = await c.Value.ReceiveAsync(),
});

然后当任务完成后,你可以将它们放在字典中:

var results = await Task.WhenAll(tasks);
var dictionary = results.ToDictionary(
    pair => pair.Key, pair => pair.Value); 

答案 1 :(得分:24)

此代码将在一行代码中完成相同的操作。

var tasks = clients.ToDictionary(c => c.Key, c => c.Value.ReceiveAsync());