Converter o C# LINQ para o dicionário

Converter O C Linq Para O Dicionario



Em C# LINQ, criar um dicionário de System.Collections.Generic.IEnumerable é possível usando o método ToDictionary(). Este método cria um dicionário com do fornecido. O System.ArgumentNullException será lançado se a fonte de dados, keySelector ou elementSelector for nulo. Além disso, se o keySelector produzir chaves duplicadas para dois elementos, o System.ArgumentException é jogado. Neste guia, discutiremos como criar um dicionário a partir da fonte de dados da lista sobrecarregando dois métodos.

Sintaxe:

1. Se você deseja criar um dicionário de acordo com o seletor de chave especificado e as funções do seletor de elemento da fonte de dados fornecida, sobrecarregue o seguinte método:









Parâmetros:



    1. fonte : Source pode ser um IEnumerable (lista) no qual o dicionário é criado a partir desta fonte.
    2. seletor de chave : Esta é uma função que é usada para obter a chave de cada elemento.
    3. ElementoSeletor: Esta é uma função que é usada para obter o elemento.
    4. TSource : Este é o parâmetro de tipo que especifica o tipo da fonte de dados.
    5. TKey: Este é o parâmetro de tipo que especifica o tipo da chave.
    6. T Elemento : Este é o parâmetro de tipo que especifica o tipo de elemento.

2. Se você deseja criar um dicionário de acordo com a função de seletor de chave especificada da fonte de dados fornecida, sobrecarregue o seguinte método:





Parâmetros:



    1. fonte : Source pode ser um IEnumerable (lista) no qual o dicionário é criado a partir desta fonte.
    2. seletor de chave : Esta é uma função que é usada para obter a chave de cada elemento.
    3. Fonte: Isso se refere ao tipo da fonte de dados.
    4. TKey : Especifica o tipo de chave.

Exemplo 1: Seletor de chave especificado e função do seletor de elemento

Crie uma lista com o tipo “Account” que contenha quatro atributos (Acc_ID, Acc_Name, Industry, Revenue) com cinco registros.

1. Crie um dicionário da lista anterior com a chave como Acc_ID e Valor como Acc_Name.
2. Crie um dicionário da lista anterior com a chave Acc_Name e Value como Revenue.

usando Sistema ;
usando System.Linq ;
usando System.Collections.Generic ;

aula Informação da conta
{
público estático vazio Principal ( )
{
// Cria lista do tipo - Account.
Detalhes da lista = novo Lista ( ) ;
// Adiciona 5 registros à lista.
detalhes . Adicionar ( novo Conta { Acc_ID = 1 , Acc_Name = 'Linux' , Indústria = 'Educação' ,Receita = 2500 } ) ;
detalhes . Adicionar ( novo Conta { Acc_ID = 2 , Acc_Name = 'Pitão' , Indústria = 'Bootcamp' ,Receita = 10000 } ) ;
detalhes . Adicionar ( novo Conta { Acc_ID = 3 , Acc_Name = 'Java' , Indústria = 'Educação' ,Receita = 500 } ) ;
detalhes . Adicionar ( novo Conta { Acc_ID = 4 , Acc_Name = '.LÍQUIDO' , Indústria = 'Treinamento' ,Receita = 2080 } ) ;
detalhes . Adicionar ( novo Conta { Acc_ID = 5 , Acc_Name = 'Oráculo' , Indústria = 'Trabalho' ,Receita = 2090 } ) ;

// Cria um dicionário da lista acima com chave como Acc_ID e valor como Acc_Name
Console . WriteLine ( ' ----Chave como Acc_ID e Valor como Acc_Name----' ) ;
Dicionário contas_dict1 = detalhes . ParaDicionário ( j => j . Acc_ID , j => j . Acc_Name ) ;

para cada ( KeyValuePair i em contas_dict1 )
{
Console . WriteLine ( 'ID da conta:' + eu . Chave + ' Nome da conta :' + eu . Valor ) ;
}

// Crie um dicionário da lista acima com chave como Acc_Name e valor como receita
Console . WriteLine ( ' ----Chave como Acc_Name e Valor como Receita----' ) ;
Contas do dicionário_dict2 = detalhes . ParaDicionário ( eu => eu . Acc_Name , eu => eu . Receita ) ;

para cada ( KeyValuePair k em contas_dict2 )
{
Console . WriteLine ( 'Nome da conta :' + k . Chave + ' Conta-Receita :' + k . Valor ) ;
}

}
}

// Cria classe nomeada - Conta com quatro atributos
público aula Conta
{
público int Acc_ID { pegar ; definir ; }
público corda Acc_Name { pegar ; definir ; }
público corda Indústria { pegar ; definir ; }
público int Receita { pegar ; definir ; }
}

Saída:

Explicação:

1. Crie uma classe chamada “Account” com quatro atributos.

2. Na classe principal, crie uma lista do tipo “Conta” e insira cinco registros nela.

3. Crie um dicionário da lista anterior com a chave como Acc_ID e Valor como Acc_Name. Aqui, especificamos o TKey como int e o TElement como string. Dentro do método ToDictionary(), passamos o Acc_ID no keySelector e o Acc_Name no elementSelector. Por fim, usamos o loop “foreach” para iterar o dicionário e retornar as chaves e valores usando as propriedades de chave e valor.

4. Crie um dicionário da lista anterior com a chave Acc_Name e o valor como Revenue. Aqui, especificamos o TKey como string e o TElement como int. Dentro do método ToDictionary(), passamos o Acc_Name no keySelector e o Revenue no elementSelector. Por fim, usamos o loop “foreach” para iterar o dicionário e retornar as chaves e valores usando as propriedades de chave e valor.

Exemplo 2: seletor de chave especificado

Use o código anterior e crie um dicionário da lista anterior com a chave como Acc_ID.

usando Sistema ;
usando System.Linq ;
usando System.Collections.Generic ;

aula Informação da conta
{
público estático vazio Principal ( )
{
// Cria lista do tipo - Account.
Detalhes da lista = novo Lista ( ) ;
// Adiciona 5 registros à lista.
detalhes . Adicionar ( novo Conta { Acc_ID = 1 , Acc_Name = 'Linux' , Indústria = 'Educação' ,Receita = 2500 } ) ;
detalhes . Adicionar ( novo Conta { Acc_ID = 2 , Acc_Name = 'Pitão' , Indústria = 'Bootcamp' ,Receita = 10000 } ) ;
detalhes . Adicionar ( novo Conta { Acc_ID = 3 , Acc_Name = 'Java' , Indústria = 'Educação' ,Receita = 500 } ) ;
detalhes . Adicionar ( novo Conta { Acc_ID = 4 , Acc_Name = '.LÍQUIDO' , Indústria = 'Treinamento' ,Receita = 2080 } ) ;
detalhes . Adicionar ( novo Conta { Acc_ID = 5 , Acc_Name = 'Oráculo' , Indústria = 'Trabalho' ,Receita = 2090 } ) ;

// Crie um dicionário da lista acima com a chave como Acc_ID.
Dicionário contas_dict = detalhes . ParaDicionário ( j => j . Acc_ID ) ;
para cada ( KeyValuePair i em contas_dict )
{
Console . WriteLine ( 'Chave:' + eu . Chave + '-->  Nome da conta :' + eu . Valor . Acc_Name
+ ' Conta-Indústria :' + eu . Valor . Indústria
+ ' Conta-Receita :' + eu . Valor . Receita ) ;
}

}
}

// Cria classe nomeada - Conta com quatro atributos
público aula Conta
{
público int Acc_ID { pegar ; definir ; }
público corda Acc_Name { pegar ; definir ; }
público corda Indústria { pegar ; definir ; }
público int Receita { pegar ; definir ; }
}

Saída:

Explicação:

Aqui, criamos um dicionário com a chave como Acc_ID. Isso funciona como a chave para cada registro no dicionário que criamos a partir da lista. Depois disso, usamos o loop “foreach” para obter as chaves e valores (com atributos) usando as propriedades de chave e valor.

Exemplo 3: chaves duplicadas – ArgumentException

Crie uma lista com dois registros e tente convertê-la em um dicionário com o Acc_ID como chave.

usando Sistema ;
usando System.Linq ;
usando System.Collections.Generic ;

aula Informação da conta
{
público estático vazio Principal ( )
{
// Cria lista do tipo - Conta.
Detalhes da lista = novo Lista ( ) ;
// Adiciona 2 registros à lista.
detalhes . Adicionar ( novo Conta { Acc_ID = 1 , Acc_Name = 'Linux' , Indústria = 'Educação' ,Receita = 2500 } ) ;
detalhes . Adicionar ( novo Conta { Acc_ID = 1 , Acc_Name = 'Pitão' , Indústria = 'Bootcamp' ,Receita = 10000 } ) ;

// Tente criar um Dicionário da Lista acima com Chave como Acc_ID.
Dicionário contas_dict = detalhes . ParaDicionário ( j => j . Acc_ID ) ;

}
}

// Cria classe nomeada - Conta com quatro atributos
público aula Conta
{
público int Acc_ID { pegar ; definir ; }
público corda Acc_Name { pegar ; definir ; }
público corda Indústria { pegar ; definir ; }
público int Receita { pegar ; definir ; }
}

Exceção:

Uma exceção não tratada que é System.ArgumentException é gerada porque a chave é duplicada (1) em ambos os Acc_IDs.

Exemplo 4: Fonte Nula – ArgumentNullException

Crie uma lista com o tipo “Conta” e atribua null a ela. Tente criar um dicionário da lista anterior com a chave como Acc_ID.

usando Sistema ;
usando System.Linq ;
usando System.Collections.Generic ;

aula Informação da conta
{
público estático vazio Principal ( )
{
// Cria uma lista do tipo - Account e atribui null a ela.
Detalhes da lista = nulo ;

// Tente criar um Dicionário da Lista acima com Chave como Acc_ID.
Dicionário contas_dict = detalhes . ParaDicionário ( j => j . Acc_ID ) ;

}
}

// Cria classe nomeada - Conta com quatro atributos
público aula Conta
{
público int Acc_ID { pegar ; definir ; }
público corda Acc_Name { pegar ; definir ; }
público corda Indústria { pegar ; definir ; }
público int Receita { pegar ; definir ; }
}

Exceção:

Uma exceção não tratada que é System.ArgumentNullException é gerada porque a lista é nula.

Conclusão

Aprendemos como criar um dicionário a partir do IEnumerable (aqui é list) usando o método ToDictionary() em C# LINQ. Esse método pode ser sobrecarregado de duas maneiras. Discutimos ambos os métodos com exemplos. Além disso, aprendemos os dois casos de exceção gerados por esse método quando a fonte de dados/keySelector/elementSelector é nula e as chaves são duplicadas.