【问题标题】:LINQ - Self join in listLINQ - 自加入列表
【发布时间】:2014-08-14 02:43:28
【问题描述】:

我有一个定义如下的列表

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

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

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

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

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

【问题讨论】:

  • 为什么Value 的类型是object 而不是String[],如果这是您使用的类型?

标签: c# linq join


【解决方案1】:

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

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

以上假设Object 包含IEnumerable&lt;string&gt;

【讨论】:

    【解决方案2】:

    你的对象是IEnumerable吗?

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

    【讨论】:

    • 使用 IEnumerable 而不是 IEnumerable 效果很好
    猜你喜欢
    • 2012-04-24
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 2016-11-21
    相关资源
    最近更新 更多