繁体   English   中英

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

[英]C# Linq copying values into model from different sources

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

Dictionary<Guid, Int32> dictionaryFromList = list
  .ToDictionary(x => x.Item1, y => y.Item2);

现在我从缓存中将所有其他信息加载到另一个Dictionary中:

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中的某些模型中插入更多数据。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]);

当你写:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM