【问题标题】:How to use LINQ to reduce a <string,list<string>> to <string,string>?如何使用 LINQ 将 <string,list<string>> 缩减为 <string,string>?
【发布时间】:2016-07-05 14:25:40
【问题描述】:

我正在调用返回类型为Dictionary&lt;string, List&lt;string&gt;&gt; 的方法。

我称它的方式是我希望 List&lt;string&gt; 总是只有 1 个字符串元素。为了简化这一点,我想使用 Linq 将返回类型转换为 Dictionary&lt;string, string&gt;

我尽量使用.ToDictionary(x =&gt; x.Key, x=&gt; x.Value);,但我不知道如何获得正确的值。使用 LINQ 可以进行这样的转换吗?

【问题讨论】:

  • 不能修改返回 Dictionary 的方法,让它返回Dictionary&lt;string, string&gt;吗?
  • 这是另一个程序中的方法,我不能轻易修改。

标签: c# linq dictionary


【解决方案1】:

尝试:

.ToDictionary(x => x.Key, x=> x.Value.FirstOrDefault());

您的字典的值为List&lt;string&gt;,因此您可以使用IEnumerable&lt;T&gt; 扩展方法。现在有几个选项可以获取第一个元素。看看这个article了解更多详情

【讨论】:

  • 解释一下使用FirstOrDefaultSingleOrDefault之间的区别可能会很好
  • 我建议使用.First 而不是.FirstOrDefault。由于 OP 似乎总是期待一个结果,如果没有结果,最好让它抛出一个错误。
  • @BradleyUffner 如果他们总是期待一个,那么应该使用Single
  • @JamieR 我还是会使用SingleOrDefault以防万一
  • @cFrozenDeath 取决于要求,从 OP 发布的内容来看,他只期望 1,所以我认为 Single 是合适的。但我明白,它是 null vs exception。
猜你喜欢
  • 1970-01-01
  • 2012-12-30
  • 2017-06-03
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多