LINQ - 自我加入列表

时间:2014-08-13 18:29:38

标签: c# linq join

我有一个List定义如下

 var MList = new List<KeyValuePair<String, Object>>();
(Example list item { "Prj1" ,  {e1,e2,e3} }

理想情况下,List项目将包含项目名称(字符串)和管理ID(对象)数组。我需要使用从原始列表中展开的项目创建和填充新列表。

因此,结果列表如下所示,每个项目都是一个字符串。

{"Prj1","e1"}
{"Prj1","e2"}
{"Prj1","e3"}

如何使用LINQ以上述格式将项目提取到新列表中

2 个答案:

答案 0 :(得分:3)

这可以使用SelectMany完成,如下所示:

var expanded = MList.SelectMany(
    item => ((IEnumerable<string>)item.Value).Select( str =>
        new KeyValuePair<string,object>(item.Key, str)
    )
);

以上假设Object包含IEnumerable<string>

答案 1 :(得分:2)

您的对象是IEnumerable吗?

var newlist = from x in mList
              from v in (IEnumerable<object>)x.Value
              select new
              {
                 x.Key,
                 v,
              };