Bob*_*man 6 c# linq dictionary list
我想写这个LINQ语句:
Dictionary<int, ItemBO> result = ( Dictionary<int, ItemBO> )
( from item in originalResults where item.Value.SomeCriteria == true
select item );
Run Code Online (Sandbox Code Playgroud)
originalResults是类型的Dictionary<int, ItemBO>.
我得到的item是类型KeyValuePair<int, ItemBO>,但是会认为从该类型的列表到该类型的词典的转换将是......呃......"自然".
相反,为了让编译器闭嘴,我需要写这个:
Dictionary<int, ItemBO> result =
( from item in originalResults where item.Value.SomeCriteria == true
select item.Value ).ToDictionary( GetItemKey );
Run Code Online (Sandbox Code Playgroud)
虽然并非完全违反直觉,但它表明,正在进行大量不必要的工作,打包和重新打包字典.有更好的解决方案吗?有没有我错过的概念?
这虽然并不完全违反直觉,但表明许多不必要的拆包和重新包装字典的工作正在幕后进行。
我不确定你所说的“不必要的”工作是什么意思。要执行此操作需要大量工作 - 必须全面评估您的查询,这涉及扫描整个字典并评估每个条目的谓词。此外,还必须创建并填充一个新字典来存储结果。我认为如果这项工作被自动转换隐藏的话,问题就更大了。
真正的问题是你用错了字典。按键查找速度很快,但按值查找需要扫描字典中的所有项目。如果您可以存储字典,以便用于过滤的值是关键,那么您将能够使用更清晰的语法进行更快的查找。