因此,我提供了一个列表列表,首先将其放入字典中以进行更快的搜索。
Dictionary<Guid, Int32> dictionaryFromList = list
.ToDictionary(x => x.Item1, y => y.Item2);
现在我从缓存中将所有其他信息加载到另一个词典中:
Dictionary<Guid, Model> modelDictionary = _cache
.Where(x => dictionaryFromList.ContainsKey(x.Id))
.Select(y => new {y.Id, y })
.ToDictionary(t => t.Id, t=> t.y);
现在我需要两件事:
1.我需要在modelDictionary的某些Model中插入更多数据
2.我需要将DictionaryFromList中的Int32插入到modelDictionary
我对1.的处理方法如下:
HashSet<Guid> toLoadIds = new HashSet<Guid>(modelDictionary
.Where(x => !x.Value.IsLoaded)
.Select(x => x.Key));
context.myTable
.Where(x => toLoadIds.Contains(x.Id))
.Select(x => new {x.value1, x.value2, x.value3, x.value4, x.value5, x.value6 }));
我现在选择了afaik的值,但是如何将它们放入modelDictionary中的正确模型中?
对于2.我尝试这样做:
dictionaryFromList.Select(y => modelDictionary[y.Key].myValue = y.Value);
但是似乎没有任何正常工作:(
当modelDictionary成为列表时,以前的2.解决方案是
modelDictionary.ForEach(x => x.myValue = dictionaryFromList[x.AddressId]);
答案 0 :(得分:0)
写时:
dictionaryFromList.Select(y => modelDictionary[y.Key].myValue = y.Value);
执行被延后 ,直到有人运行返回的select迭代器。但是您不会捡起它,所以没人能做到。
您可以做:
dictionaryFromList.Select(y => modelDictionary[y.Key].myValue = y.Value)
.LastOrDefault();
最终调用将强制选择迭代器的迭代。但是我觉得那很丑。为什么不简单地使用foreach
?
foreach (var y in dictionaryFromList) { modelDictionary[y.Key].myValue = y.Value; }