c#`dictionary of dictionary`查询
有人能告诉我正确的查询方法吗:c#`dictionary of dictionary`查询,c#,C#,有人能告诉我正确的查询方法吗: dictionary of dictionary Dictionary<int, Dictionary<Guid, AutoStopWatchAndLog>> _dicDictionaryThread 如果要投影到筛选到所需项的新字典,则需要投影两个级别的字典,如下所示: var query = _dicDictionaryThread.Select(o => new {o.Key, Value = o.Value
dictionary of dictionary
Dictionary<int, Dictionary<Guid, AutoStopWatchAndLog>> _dicDictionaryThread
如果要投影到筛选到所需项的新字典,则需要投影两个级别的字典,如下所示:
var query = _dicDictionaryThread.Select(o => new {o.Key, Value = o.Value
.Where(y=>y.Value.Level > x)
.ToDictionary(y => y.Key, y => y.Value)})
.Where(o => o.Value.Any())
.ToDictionary(o => o.Key, o => o.Value);
如果你能很容易地理解这一点并向其他人解释,那就去做吧,否则就使用传统的循环-你不会从Linq中获得任何性能提升,而且破译可能需要更长的时间。你希望输出的结构是什么?上层的int和下层的
Guid
?是否要输出级别本身?你为什么要调用FirstOrDefault
?@DStanley你说得很对是的ID和GUID可以。。。但我认为它只会过滤匹配的集合,所以最终将是一个INT级别的集合和一个GUID级别的集合。但林克的表现不是更差吗?人们使用它是因为它更容易理解,而不是相反。@jdmdevdotnet性能差异通常可以忽略不计。对性能的影响来自迭代器、过滤器和委托的额外开销,但通常很小,总体上不会产生显著的影响。不过,在这种情况下,我不会说它更“可读”。一个带有适当注释的循环将更容易遵循IMHO。同意不同意;)
var query = _dicDictionaryThread.Select(o => new {o.Key, Value = o.Value
.Where(y=>y.Value.Level > x)
.ToDictionary(y => y.Key, y => y.Value)})
.Where(o => o.Value.Any())
.ToDictionary(o => o.Key, o => o.Value);