SelectMany on tuples of { key, values } - obtain key in result?
我有一个{ string Key, IEnumerable Values }项的列表,想把它转换成{ string Key, string Value }项的列表,这样新的列表就包含了每个Key项的n项。
我想用LINQ,想用SelectMany:
1
| list.SelectMany(item => item.Values) |
然而,正如你所看到的,我失去了Key的转换。诀窍是什么?我想这应该很容易,我只是错过了森林的树木…
- 我想你需要这样做:stackoverflow.com/questions/6428940/…
- list.SelectMany(item => item.Values, (item, value) => Tuple.Create(item.Key, value))
- 是的,森林……树。。。超载…谢谢!
- 后续问题:是否可以为每个空值集合添加一个NULL元组?
- 目前使用的item.Values.Concat(new string[]{null})看起来不是很"性能"。
- item.Values.DefaultIfEmpty()
- 谢谢!响应时间太快了!:-)readers:请注意,我的"解决方案"一直在添加空条目,而petseral的解决方案只在集合为空时添加空条目。
我也碰到了这个脑冷冻。从评论中添加@petseral的答案:
1
| list.SelectMany(item => item.Values.DefaultIfEmpty(), (item, value) => Tuple.Create(item.Key, value)) |
不是编译的代码,但这可以回答您的问题
var finalList=list.SelectMany(item => item).Select(final => new{KeyName=item.Key,Coll=item.Values}).ToList();