C#Linq从不同来源将值复制到模型中

时间:2018-09-20 09:22:10

标签: c# linq

因此,我提供了一个列表列表,首先将其放入字典中以进行更快的搜索。

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]);

1 个答案:

答案 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; }