【问题标题】:Dictionary<Foo, List<Bar>> How to assign the list to a property of the key with LINQ?Dictionary<Foo, List<Bar>> 如何使用 LINQ 将列表分配给键的属性?
【发布时间】:2010-08-25 22:11:28
【问题描述】:

我有一本问题中描述的字典。我的 Foo 类如下所示:

class Foo {
 List<Bar> Bars {get;set;}
}

我想遍历字典,并将 KeyValuePair 值分配给 Key 的 Bars 属性。这可能吗?

我有这样的东西,但有点不稳定:

List<Foo> foos = new List<Foo>();

foreach(var kvp in myDict)
{
  kvp.Key.Bars = kvp.Value;
  foos.Add(kvp.Key);
}

return foos;

编辑: 这似乎好一点:

    foreach (var kvp in results.Keys)
    {
        kvp.Bars = results[kvp];
    }

    return results.Select(kvp => kvp.Key);

【问题讨论】:

    标签: c# linq dictionary


    【解决方案1】:

    我不是 100% 确定你的意思,但是这个呢:

    var foos = myDict.Select(kvp =>
               {
                   kvp.Key.Bars = kvp.Value;
    
                   return kvp.Key;
               }).ToList();
    

    【讨论】:

    • 我相信这就是我要找的!
    • @scottm 很酷,但是,您不应该认为这些方法还会更改 myDict 中的键 .Bars
    【解决方案2】:

    怎么样

    List<Foo> foos = (from kvp in myDict
                      select new Foo() { Bars = kvp.Value }).ToList();
    

    List<Foo> foos = (from kvp in myDict
                      let dummy = (kvp.Key.Bars = kvp.Value)
                      select kvp.Key).ToList();
    

    【讨论】:

    • 使用 new Foo(),我失去了已经分配的其他属性。
    • 添加了一个替代方案,实际上与 lasseespeholt 的答案相同,但在纯 LINQ 中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    相关资源
    最近更新 更多