[英]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.