我的Lookup看起来像这样:
Lookup<string, DataModel> lookup;
除此之外,我还有包含键映射的字典:
Dictionary<string, KeyModel> keyMappings;
我想要做的是以下列方式将查找中的字符串键重新映射到KeyModel
实体:
Lookup <string, DataModel> lookup;
||
||
Dictionary<string, KeyModel> keyMappings;
___________|
v
Lookup<KeyModel, DataModel> result;
答案 0 :(得分:1)
假设:
SELECT *
FROM my_table
WHERE date_created >= TRUNC(SYSDATE,'mm')
AND date_Created < TRUNC(SYSDATE,'mm')+13;
回复是:
Dictionary<string, KeyModel> keyMappings = ...;
ILookup<string, DataModel> lookup = ...;
首先,使用ILookup<KeyModel, DataModel> lookup2 = lookup
.SelectMany(x => x, (grouping, element) => new { Key = keyMappings[grouping.Key], Element = element })
.ToLookup(x => x.Key, x => x.Element);
重新线性化ILookup<,>
,然后重新创建SelectMany
。
显然,您需要ILookup<,>
来定义KeyModel
和GetHashCode()
,或者您需要Equals()
作为IEqualityComparer<KeyModel>
<的参数传递/ p>
答案 1 :(得分:0)
您可以使用简单的foreach
- 循环。
首先,您需要将Lookup转换为Dictionary。请参阅here。
foreach (KeyValuePair<string, DataModel> kvp in lookup) {
KeyModel outValue;
if (keyMappings.TryGetValue(kvp.Key, out outValue))
{
result.Add(outValue, lookup[kvp.Key]);
}}
不是最快的解决方案,也许有人想出一个不错的LINQ。