Escrevendo consultas em C# LINQ

Escrevendo Consultas Em C Linq



Semelhante ao SQL, é possível escrever consultas em C# LINQ usando a sintaxe de consulta. Essas consultas são usadas em aplicativos de banco de dados C# na Web para obter os dados do banco de dados e exibi-los na Web para usuários de terceiros. Neste guia, discutiremos algumas consultas LINQ semelhantes ao SQL. Para isso, criaremos uma fonte de dados de lista e aplicaremos as consultas nela.

Sintaxe da consulta:

Vejamos a sintaxe genérica:

de iterador em Fonte de dados
selecionar iterador ;

Aqui:







  1. O Data_Source pode ser a lista que contém os dados.
  2. O iterador é usado para buscar os elementos do Data_Source.

Fonte de dados

Em todo este guia, usaremos a seguinte lista de registros como fonte de dados e todas as consultas serão aplicadas somente a essa fonte de dados. Certifique-se de executar este código em seu ambiente e modificar as instruções de consulta com os seguintes exemplos, um por um, que discutiremos:



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

público aula cálculos
{
público estático vazio Principal ( )
{
// Criação da lista
Listar country_prices = novo Lista ( ) {

// Adiciona 5 registros na lista
novo Preços ( ) { item = 'Frutas' ,localização = 'EUA' , quantidade = 100 , custo = 345,78 } ,
novo Preços ( ) { item = 'Nozes' ,localização = 'Índia' , quantidade = 200 , custo = 3645,78 } ,
novo Preços ( ) { item = 'Outros' ,localização = 'REINO UNIDO' , quantidade = 500 , custo = 90,68 } ,
novo Preços ( ) { item = 'óleo' ,localização = 'EUA' , quantidade = 100 , custo = 345,78 } ,
novo Preços ( ) { item = 'Pimenta chili' ,localização = 'EUA' , quantidade = 10 , custo = 67,89 } ,
} ;


para cada ( era eu em country_prices )
{
Console . WriteLine ( eu . item + ' ' + eu . localização + ' ' + eu . quantidade + ' ' + eu . custo ) ;
}
}
}
público aula Preços {
público corda item { pegar ; definir ; }
público corda localização { pegar ; definir ; }
público int quantidade { pegar ; definir ; }
público dobro custo { pegar ; definir ; }
}

Registros:







Explicação:

1. Crie os preços com os seguintes atributos:

2. Crie outra classe que é “Calculations” com o método main e crie a lista country_prices com cinco registros.



Selecione

Basicamente, “selecionar” é um operador de projeção que seleciona os atributos da fonte de dados especificada. A consulta começa com “de”. Em seguida, especificamos o iterador que itera sobre a fonte de dados. Em seguida, o operador “selecionar” é especificado.

Sintaxe:

Todos os atributos: do iterador em Data_Source selecione o iterador;

Atributo específico: do iterador em Data_Source selecione iterator.attribute;

Exemplo 1:

Vamos escrever uma consulta para selecionar todos os registros da lista.

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

público aula cálculos
{
público estático vazio Principal ( )
{
// Criação da lista
Listar country_prices = novo Lista ( ) {

// Adiciona 5 registros na lista
novo Preços ( ) { item = 'Frutas' ,localização = 'EUA' , quantidade = 100 , custo = 345,78 } ,
novo Preços ( ) { item = 'Nozes' ,localização = 'Índia' , quantidade = 200 , custo = 3645,78 } ,
novo Preços ( ) { item = 'Outros' ,localização = 'REINO UNIDO' , quantidade = 500 , custo = 90,68 } ,
novo Preços ( ) { item = 'óleo' ,localização = 'EUA' , quantidade = 100 , custo = 345,78 } ,
novo Preços ( ) { item = 'Pimenta chili' ,localização = 'EUA' , quantidade = 10 , custo = 67,89 } ,
} ;

//seleciona o operador na consulta
era dados = de eu em country_prices
selecionar eu ;

para cada ( era eu em dados )
{
Console . WriteLine ( eu . item + ' ' + eu . localização + ' ' + eu . quantidade + ' ' + eu . custo ) ;

}
}
}
público aula Preços {
público corda item { pegar ; definir ; }
público corda localização { pegar ; definir ; }
público int quantidade { pegar ; definir ; }
público dobro custo { pegar ; definir ; }
}

Saída:

Aqui, não especificamos nenhum atributo na consulta “selecionar”. Buscamos todos os atributos da consulta (dados) dentro do loop “foreach” usando o iterador.

Exemplo 2:

Agora, obtenha os itens especificando o atributo do item no operador “selecionar”. A consulta é  ' de i em country_prices selecione i.item ”.

//selecione o operador para obter o atributo do item na consulta
era dados = de eu em country_prices
selecionar eu . item ;

para cada ( era eu em dados )
{
Console . WriteLine ( eu ) ;

}

Saída:

Linha # 21 – Linha # 29:

2. Onde

Se você deseja filtrar os dados com base em algumas condições, pode usar o operador “where” na consulta junto com a cláusula “select”. Mas o operador “where” é usado primeiro e depois o operador select é especificado.

Sintaxe:

Vamos ver como usar o operador “where” dentro da consulta LINQ.

de iterador em Fonte de dados
onde doença / s
selecionar iterador . atributo ;

Exemplo 1: condição única

Vamos filtrar os registros com base no atributo do item. Use o operador igual a (==) no operador “where” como condição e compare o iterador com “Chillies”. Assim, selecionam-se os registos que estão relacionados com “Pimentas”.

A consulta é “ de i em country_prices
onde i.item == “Pimentões”
selecione eu”

//selecione com onde filtrar os registros
era dados = de eu em country_prices
onde eu . item == 'Pimenta chili'
selecionar eu ;

para cada ( era eu em dados )
{
Console . WriteLine ( eu . item + ' ' + eu . localização + ' ' + eu . quantidade + ' ' + eu . custo ) ;

}

Saída:

Existe apenas um registro com o item “Pimentões”.

Linha # 21 – Linha # 30:

Exemplo 2: Condições Múltiplas

Vamos filtrar os registros com base nos atributos de localização e quantidade. A quantidade deve ser maior que 50 e menor que 300. O local deve ser “EUA”.

A consulta é “ de i em country_prices
onde i.quantidade > 50
onde i.quantidade < 300
onde i.location == “EUA”
selecione eu”

//selecione onde filtrar registros especificando várias condições
era dados = de eu em country_prices
onde eu . quantidade > cinquenta
onde eu . quantidade < 300
onde eu . localização == 'EUA'
selecionar eu ;

para cada ( era eu em dados )
{
Console . WriteLine ( eu . item + ' ' + eu . localização + ' ' + eu . quantidade + ' ' + eu . custo ) ;

}

Saída:

Existem dois registros que corresponderam às condições anteriores.

Linha # 21 – Linha # 32:

Exemplo 3: E (&&) Operador

Podemos especificar o operador “e (&&)” para especificar várias condições ao mesmo tempo. Se todas as condições forem verdadeiras, os registros que atendem a todas as condições são retornados pela consulta.

Neste exemplo, selecionamos os registros se a quantidade for maior que 20 e o custo for 67,89.

A consulta é “ de i em country_prices
onde i.quantidade < 20 && i.custo == 67,89
selecione eu”

era dados = de eu em country_prices
onde eu . quantidade < vinte && eu . custo == 67,89
selecionar eu ;

para cada ( era eu em dados )
{
Console . WriteLine ( eu . item + ' ' + eu . localização + ' ' + eu . quantidade + ' ' + eu . custo ) ;

}

Saída:

Existe apenas um registro com a quantidade menor que 20 e um custo de 67,89

Linha # 21 – Linha # 29:

Exemplo 4: Ou (||) Operador

O operador “ou (||)” também é usado para especificar várias condições por vez. Se pelo menos uma condição for verdadeira, os registros que atendem a essa condição são retornados.

Neste exemplo, selecionamos os registros se a quantidade for maior que 300 ou o local for “Tóquio”.

A consulta é “ de i em country_prices
onde i.quantidade > 300 || i.location == “Tóquio”
selecione eu”

era dados = de eu em country_prices
onde eu . quantidade > 300 || eu . localização == 'Tóquio'
selecionar eu ;

para cada ( era eu em dados )
{
Console . WriteLine ( eu . item + ' ' + eu . localização + ' ' + eu . quantidade + ' ' + eu . custo ) ;

}

Saída:

Existe apenas um registro com uma quantidade maior que 300 (a primeira condição é atendida).

Linha # 21 – Linha # 29:

3. Ordenar por

Se quiser organizar os registros retornados pela consulta LINQ em ordem crescente ou decrescente com base nos valores de qualquer um dos atributos, você pode usar o operador “ordenar por” na consulta. Você precisa especificar este operador antes do operador “selecionar”.

Sintaxe:

Vamos ver como usar o operador “order by” dentro da consulta LINQ.

Ordem ascendente:

de iterador em Fonte de dados
ordem por iterador . atributo ascendente
selecionar iterador ;

Ordem decrescente:

de iterador em Fonte de dados
ordem por iterador . atributo descendente
selecionar iterador ;

Exemplo 1: Ordem ascendente

Selecione todos os atributos da fonte de dados (lista) e retorne-os em ordem crescente com base nos valores do atributo de quantidade.

A consulta é “ de i em country_prices
orderby i.quantity crescente
selecione eu”

era dados = de eu em country_prices
ordem por eu . quantidade ascendente
selecionar eu ;

para cada ( era eu em dados )
{
Console . WriteLine ( eu . item + ' ' + eu . localização + ' ' + eu . quantidade + ' ' + eu . custo ) ;

}

Saída:

Linha # 21 – Linha # 29:

Exemplo 2: Ordem decrescente

Selecione todos os atributos da fonte de dados (lista) e retorne-os em ordem decrescente com base nos valores do atributo de custo.

A consulta é “ de i em country_prices
orderby i.cost descendente
selecione eu”

era dados = de eu em country_prices
ordem por eu . custo descendente
selecionar eu ;

para cada ( era eu em dados )
{
Console . WriteLine ( eu . item + ' ' + eu . localização + ' ' + eu . quantidade + ' ' + eu . custo ) ;

}

Saída:

Linha # 21 – Linha # 29:

4. Limite

Limit em SQL limita os registros que são retornados pela consulta. Ele retorna os principais registros retornados pela consulta. No LINQ, podemos conseguir isso utilizando o Skip() com o operador Take(). Take() obtém o número especificado de registros. Skip() é usado para especificar o número do registro inicial. Dessa forma, podemos alcançar a funcionalidade “limite” no LINQ.

Sintaxe:

( de iterador em Fonte de dados
selecionar iterador ) . Pular ( n ) . Pegar ( n ) ;
  1. Skip() é usado para pular os registros e retornar os registros restantes. Leva um inteiro que especifica o número de elementos a serem ignorados. No nosso caso, é 0.
  2. Take() é usado para obter “n” número de registros do primeiro registro.

Exemplo:

Selecione os três primeiros registros de cinco registros retornados pela consulta.

A consulta é “ (de i em country_prices
selecione i).Skip(0).Take(3)”

era dados = ( de eu em country_prices
selecionar eu ) . Pular ( 0 ) . Pegar ( 3 ) ;

para cada ( era eu em dados )
{
Console . WriteLine ( eu . item + ' ' + eu . localização + ' ' + eu . quantidade + ' ' + eu . custo ) ;

}

}

Saída:

Linha # 21 – Linha # 28:

Conclusão

Aprendemos a escrever as consultas em C# LINQ, que é semelhante ao SQL. Como parte deste tutorial, discutimos como usar o operador “selecionar” para selecionar os registros da fonte de dados. Para filtrar os registros que são retornados pela consulta, utilizamos o operador “where” especificando as condições. Em seguida, aprendemos a ordenar os registros que são retornados pela consulta com o operador “ordenar por”. Por fim, para limitar os registros, utilizamos os operadores Skip() e Take().