Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 展开IDictionary_C#_Linq_Lambda - Fatal编程技术网

C# 展开IDictionary

C# 展开IDictionary,c#,linq,lambda,C#,Linq,Lambda,我现在有一本字典,我想扩展它,所以它将成为一本字典 使用简单的foreach循环执行此操作很容易,但也很麻烦: var result = new List<KeyValuePair<Key, Value>>(); foreach(var kvp in dict) { foreach(var v in kvp.Value) { result.Add(new KeyValuePair<Key, Value>(kvp.Key, v))

我现在有一本字典,我想扩展它,所以它将成为一本字典

使用简单的foreach循环执行此操作很容易,但也很麻烦:

var result = new List<KeyValuePair<Key, Value>>();
foreach(var kvp in dict)
{
    foreach(var v in kvp.Value)
    {
        result.Add(new KeyValuePair<Key, Value>(kvp.Key, v));
    }
}

现在我想将其转换为单个LINQ查询,最好使用lambda语法。目前在项目中的任何地方都没有使用表达式语法,也不想现在就开始使用

使用LINQ inline如何:

var结果=来自dict中的kvp 从v到kvp.值 选择new KeyValuePairkvp.Key,v 托利斯特先生;
但是,我不知道lambda语法。

使用LINQ inline如何:

var结果=来自dict中的kvp 从v到kvp.值 选择new KeyValuePairkvp.Key,v 托利斯特先生;
但是,我不知道lambda语法。

不能添加同一个键两次,但这会发生在嵌套循环中

如果您想将其展平为注释中的IEnumerable,可以使用SelectMany:


不能两次添加同一个键,但这会发生在嵌套循环中

如果您想将其展平为注释中的IEnumerable,可以使用SelectMany:

您可以使用查找,因为它支持每个值有多个键

var dict = new Dictionary<string, IEnumerable<string>>();
var lookUp = dictionary
    .SelectMany(pair => pair.Value
        .Select(value => new { Key = pair.Key, Value = value }))
    .ToLookup(pair => pair.Key, pair => pair.Value);
您可以使用查找,因为它支持每个值有多个键

var dict = new Dictionary<string, IEnumerable<string>>();
var lookUp = dictionary
    .SelectMany(pair => pair.Value
        .Select(value => new { Key = pair.Key, Value = value }))
    .ToLookup(pair => pair.Key, pair => pair.Value);

这应该会让你大吃一惊,因为字典每个键只支持一个值。您需要一个多字典,并且基类库中没有内置这样的东西。这将在第一次遇到包含多个成员的IEnumerable值时引发键已存在异常。@Trillian@BolucPapuccuoglu很好,我可能应该将其更改为IEnumerable@Kippie或者查找一下,这应该会让您大吃一惊,因为字典每个键只支持一个值。您需要一个多字典,并且基类库中没有内置这样的东西。这将在第一次遇到包含多个成员的IEnumerable值时引发键已存在异常。@Trillian@BolucPapuccuoglu很好,我可能应该将其更改为IEnumerable@Kippie或者对LookupWell来说,这很有效,尽管我真的希望它是lambda,但是。好吧,这很有效,虽然我真的很想成为兰姆达,但是。太好了,那就行了!太好了,这就行了!