我正在使用以下 linq 代码将值添加到字典中,现在发生的情况是重复的键条目是从字典中跳过两个条目,我需要至少一个存在于字典中。如何在以下 LINQ 代码中执行此操作。我只想要在 LINQ 中,代码如下所示:dict = (from x in sites let pp1 = x.Split(',') where pp1.Length > 2 let rnc = pp1[1].Replace("work=", "") let ems = pp1[2].Replace("Context=", "") let pp2 = GetName(ems, "CC", "U").Split('_') where pp2.Length > 1 && !ems.Contains("_L_") select new { name_ms = ems, Key = ems + "," + rnc, Value = Getidname(GetName(ems, "CC", "U"), GetCode(pp2[1])) + "," + ems.Split('_')[1] }) .ToDictionary(x => x.Key, x => x.Value);
2 回答
www说
TA贡献1775条经验 获得超8个赞
坦率地说,我会用自定义扩展方法来替换ToDictionary,但不是使用Add,而是使用索引器分配:
public static Dictionary<TKey, TValue> ToDictionaryLast<TSource, TKey, TValue>(
this IEnumerable<TSource> source, Func<TSource, TKey> keySelector,
Func<TSource, TValue> valueSelector)
{
var result = new Dictionary<TKey, TValue>();
foreach(var value in source)
result[keySelector(value)] = valueSelector(value);
return result;
}
这 - 在重复键的情况下 - 保留最后一个值,而不是失败。然后将最后一个操作替换为:
.ToDictionaryLast(x => x.Key, x => x.Value);
慕容3067478
TA贡献1773条经验 获得超3个赞
您需要按Key
属性对其进行Select
First
分组,然后从分组的子项中分组。然后,您将有效地跳过不是按 Key 分组的第一个记录。
...).GroupBy(i => i.Key).Select(g => g.First()).ToDictionary(...
- 2 回答
- 0 关注
- 148 浏览
添加回答
举报
0/150
提交
取消