Partilhar via


Demonstra Passo a passo: Escrever consultas em translation from VPE for Csharp (LINQ)

Esta explicação passo a passo irá orientá-lo os novos recursos de linguagem 3.0 translation from VPE for Csharp e mostrar como eles são usados para gravar LINQ expressões de consulta. Depois de concluir esta explicação passo a passo, você estará pronto para passar para sistema autônomo Exemplos e documentação para o específico LINQ Você está interessado, sistema autônomo o provedor LINQ to SQL, LINQ Para DataSets, ou LINQ to XML.

Pré-requisitos

Esta explicação passo a passo requer Visual Studio 2008.

Para uma demonstração de vídeo, consulte Vídeo How to: Gravando consultas em translation from VPE for Csharp (LINQ).

Criar um projeto translation from VPE for Csharp

Para criar um projeto translation from VPE for Csharp que destinos versão 3.5 do .NET estrutura

  1. Inicie o Visual Studio

  2. No menu File, aponte para New, e em seguida, clique em Project.

  3. O canto superior direito do Novo projetocaixa de diálogo possui três ícones.clicar no ícone à esquerda e certifique-se de que .NET estrutura versão 3.5 é verificado.

  4. clicar no Aplicativo de console ícone de O Visual Studio Installed Templates.

  5. Forneça um novo nome a seu aplicativo ou aceite o nome padrão e clicar OK.

  6. Observe que o seu projeto possui uma referência a sistema.Core.dll e um using diretiva para o System.Linq espaço para nome.

Criar na memória fonte de dados

A fonte de dados para as consultas é uma lista simples de Student objetos. Cada Student registro tem um nome, sobrenome e uma matriz de inteiros que representa sua teste pontuações na classe. Copie este código para seu projeto.Observe as seguintes características:

  • The Student classe consiste em propriedades implementadas automaticamente.

  • Cada aluno na lista é inicializado com um inicializador de objeto.

  • A lista em si é inicializada com um inicializador de coleta.

Essa estrutura de dados inteira será inicializada e instanciada sem chamadas explícitas a nenhum construtor ou acesso de membro explícito.Para obter mais informações sobre esses novos recursos, consulte Propriedades de Automático-implementado (Guia de programação C#) e Objeto e inicializadores de coleção (Guia de programação C#).

Para criar a fonte de dados

  • Adicionar o Student classe e a lista inicializada de que os alunos a Program classe em seu projeto.

    public class Student
    {
        public string First { get; set; }
        public string Last { get; set; }
        public int ID { get; set; }
        public List<int> Scores;
    }
    
    // Create a data source by using a collection initializer.
    static List<Student> students = new List<Student>
    {
       new Student {First="Svetlana", Last="Omelchenko", ID=111, Scores= new List<int> {97, 92, 81, 60}},
       new Student {First="Claire", Last="O’Donnell", ID=112, Scores= new List<int> {75, 84, 91, 39}},
       new Student {First="Sven", Last="Mortensen", ID=113, Scores= new List<int> {88, 94, 65, 91}},
       new Student {First="Cesar", Last="Garcia", ID=114, Scores= new List<int> {97, 89, 85, 82}},
       new Student {First="Debra", Last="Garcia", ID=115, Scores= new List<int> {35, 72, 91, 70}},
       new Student {First="Fadi", Last="Fakhouri", ID=116, Scores= new List<int> {99, 86, 90, 94}},
       new Student {First="Hanying", Last="Feng", ID=117, Scores= new List<int> {93, 92, 80, 87}},
       new Student {First="Hugo", Last="Garcia", ID=118, Scores= new List<int> {92, 90, 83, 78}},
       new Student {First="Lance", Last="Tucker", ID=119, Scores= new List<int> {68, 79, 88, 92}},
       new Student {First="Terry", Last="Adams", ID=120, Scores= new List<int> {99, 82, 81, 79}},
       new Student {First="Eugene", Last="Zabokritski", ID=121, Scores= new List<int> {96, 85, 91, 60}},
       new Student {First="Michael", Last="Tucker", ID=122, Scores= new List<int> {94, 92, 91, 91} }
    };
    

Para adicionar um aluno novo a lista de estudantes

  • Adicionar um novo Student para o Students Listar e use um nome e testar pontuações de sua escolha. Tente digitar as novas informações de aluno para melhor saber a sintaxe para o inicializador de objeto.

Criar a consulta

Para criar uma consulta simples

  • Do aplicativo Main método, criar uma consulta simples que, quando ele é executado, produzirá uma lista de todos os alunos cuja pontuação no primeiro teste era maior do que 90. Observe que, como o inteiro Student objeto estiver selecionado, o tipo de consulta é IEnumerable<Student>. Embora o código também possa usar digitação implícita usando o var palavra-chave, digitando explícito é usado para ilustrar claramente os resultados.(Para obter mais informações sobre o var, consulte Digitada implicitamente variáveis Local (C# Guia de programação).)

    Observe também que a consulta intervalo variável, student, serve sistema autônomo uma referência a cada Student na fonte, fornecendo acesso de membro para cada objeto.

// Create the query.
// studentQuery is an IEnumerable<Student>
var studentQuery =
    from student in students
    where student.Scores[0] > 90
    select student;

Executar a consulta

Para executar a consulta

  1. Escreva o foreach loop que fará com que a consulta executar. Observe o seguinte sobre o código:

    • Cada elemento da sequência retornada é acessado através da variável de iteração no foreach loop.

    • O tipo dessa variável é Student, e é compatível, o tipo de variável de consulta IEnumerable<Student>.

  2. Após adicionar esse código, criar e executar o aplicativo pressionando CTRL + F5 para ver os resultados no Console janela.

// Execute the query.
// var could be used here also.
foreach (Student student in studentQuery)
{
    Console.WriteLine("{0}, {1}", student.Last, student.First);
}

Para adicionar outra condição de filtro

  • Você pode agrupar várias condições booleanas no where cláusula para refinar uma consulta. O código a seguir adiciona uma condição para que a consulta retorne os alunos cuja primeira pontuação foi mais de 90 e cuja última pontuação foi menos de 80.The where cláusula deve se parecer com o código a seguir.

    where student.Scores[0] > 90 && student.Scores[3] < 80
    

    Para obter mais informações, consulte onde cláusula (Referência C#).

Modificar a consulta

Para solicitar os resultados

  1. Será mais fácil examinar os resultados se eles estiverem em algum tipo de ordem.Você pode solicitar a sequência retornada por qualquer campo acessível nos elementos de fonte.Por exemplo, a seguinte orderby cláusula ordena os resultados em ordem alfabético da a Z de acordo com como o último nome de cada aluno. Adicione o seguinte orderby cláusula para sua consulta, direita após o where demonstrativo e antes de select demonstrativo:

    orderby student.Last ascending
    
  2. Agora altere o orderby cláusula, de modo que ele ordena os resultados em ordem inversa de acordo com a pontuação no primeiro teste, da pontuação mais alta à menor pontuação.

    orderby student.Scores[0] descending
    
  3. Alterar o WriteLine Formatar seqüência de caracteres de forma que você pode ver os resultados:

    Console.WriteLine("{0}, {1} {2}", s.Last, s.First, s.Scores[0]);
    

    Para obter mais informações, consulte cláusula orderby (Referência C#).

Para agrupar os resultados

  1. O agrupamento é um recurso poderoso em expressões de consulta.Uma consulta com uma cláusula agrupar produz uma sequência de grupos, e cada agrupar em si contém um Key e uma sequência que consiste em todos os membros desse agrupar. A nova consulta a seguir agrupa sistema autônomo alunos usando a primeira letra do sobrenome sistema autônomo a chave.

    // studentQuery2 is an IEnumerable<IGrouping<char, Student>>
    var studentQuery2 =
        from student in students
        group student by student.Last[0];
    
  2. Observe que o tipo de consulta agora foi alterado.Ela produz uma sequência de grupos que têm um agorachar Digite sistema autônomo uma chave e uma sequência de Student objetos. Como o tipo de consulta foi alterada, o código a seguir altera o foreach execução de loop também:

    // studentGroup is a IGrouping<char, Student>
    foreach (var studentGroup in studentQuery2)
    {
        Console.WriteLine(studentGroup.Key);
        foreach (Student student in studentGroup)
        {
            Console.WriteLine("   {0}, {1}",
                      student.Last, student.First);
        }
    }
    
  3. Pressione CTRL + F5 para executar o aplicativo e exiba os resultados no Console janela.

    Para obter mais informações, consulte cláusula de AAgruparar (Referência C#).

Para tornar as variáveis digitadas implicitamente

  • Codificação explicitamente IEnumerables de IGroupings pode rapidamente se tornar entediante. Você pode escrever a mesma consulta e foreach loop muito mais conveniente usando var. The var palavra-chave não altera os tipos de objetos; ele simplesmente instrui o compilador a inferir os tipos. Alterar o tipo de studentQuery e a variável de iteração group para var e execute novamente a consulta. Observe que no interna foreach loop, a variável de iteração ainda é digitada sistema autônomo Student, e a consulta funciona exatamente sistema autônomo antes. Alterar o s variável de iteração para var e execute a consulta novamente. Você verá que você obtenha exatamente os mesmos resultados.

    var studentQuery3 =
        from student in students
        group student by student.Last[0];
    
    foreach (var groupOfStudents in studentQuery3)
    {
        Console.WriteLine(groupOfStudents.Key);
        foreach (var student in groupOfStudents)
        {
             Console.WriteLine("   {0}, {1}",
                 student.Last, student.First);
        }
    }
    

    Para obter mais informações sobre o var, see Digitada implicitamente variáveis Local (C# Guia de programação).

Para solicitar os grupos por valor de chave

  • Se você executa a consulta anterior, observe que os grupos não estão em ordem alfabético.Para alterar isso, você deve fornecer um orderby cláusula após a group cláusula. Mas ao usar um orderby cláusula, primeiro é necessário um identificador que serve sistema autônomo uma referência para sistema autônomo grupos criados pela group cláusula. Você fornecer o identificador usando o into palavra-chave, sistema autônomo segue:

    var studentQuery4 =
        from student in students
        group student by student.Last[0] into studentGroup
        orderby studentGroup.Key
        select studentGroup;
    
    foreach (var groupOfStudents in studentQuery4)
    {
        Console.WriteLine(groupOfStudents.Key);
        foreach (var student in groupOfStudents)
        {
            Console.WriteLine("   {0}, {1}",
                student.Last, student.First);
        }
    }
    
    

    Quando você executa essa consulta, você verá que agora, os grupos são classificados em ordem alfabético.

Apresentar um identificador usando let

  • Você pode usar o let palavra-chave para apresentar um identificador para qualquer resultado da expressão em expressão de consulta. Esse identificador pode ser uma conveniência, sistema autônomo no exemplo a seguir, ou ele pode melhorar o desempenho pelo armazenamento de resultados de uma expressão para que ele não tem que ser calculado várias vezes.

    // studentQuery5 is an IEnumerable<string>
    // This query returns those students whose
    // first test score was higher than their
    // average score.
    var studentQuery5 =
        from student in students
        let totalScore = student.Scores[0] + student.Scores[1] +
            student.Scores[2] + student.Scores[3]
        where totalScore / 4 < student.Scores[0]
        select student.Last + " " + student.First;
    
    foreach (string s in studentQuery5)
    {
        Console.WriteLine(s);
    }
    

    Para obter mais informações, consulte permitir que a cláusula (Referência C#).

Para usar a sintaxe do método em uma expressão de consulta

  • Conforme descrito em Sintaxe de consulta em relação a sintaxe do método (LINQ), algumas operações de consulta só podem ser expressos usando sintaxe do método. O código a seguir calcula a pontuação total para cada Student na sequência de fonte e, em seguida, chamadas de Average() método nos resultados dessa consulta para calcular a pontuação média da classe. Observe a colocação de expressão de consulta entre parênteses.

        var studentQuery6 = 
            from student in students
            let totalScore = student.Scores[0] + student.Scores[1] +
                student.Scores[2] + student.Scores[3]
            select totalScore;
    
        double averageScore = studentQuery6.Average();
    Console.WriteLine("Class average score = {0}", averageScore);
    

A transformação ou o projeto na cláusula selecionar

  1. É muito comum para uma consulta produzir uma sequência cujos elementos diferem dos elementos em seqüências de fonte.Exclua ou comente o loop e execução de consulta anterior e substitua-o com o código a seguir.Observe que a consulta retorna uma sequência de cadeias de caracteres (não Students), e esse fato é refletido na foreach loop.

    IEnumerable<string> studentQuery7 =
        from student in students
        where student.Last == "Garcia"
        select student.First;
    
    Console.WriteLine("The Garcias in the class are:");
    foreach (string s in studentQuery7)
    {
        Console.WriteLine(s);
    }
    
    
  2. Código de anteriormente nesta explicação passo a passo indicou que a pontuação média classe está 334 aproximadamente.Para produzir uma sequência de Students pontuação cuja total é maior do que a média de classe, em conjunto com seus Student ID, você pode usar um tipo anônimo na select demonstrativo:

    var studentQuery8 =
        from student in students
        let x = student.Scores[0] + student.Scores[1] +
            student.Scores[2] + student.Scores[3]
        where x > averageScore
        select new { id = student.ID, score = x };
    
    foreach (var item in studentQuery8)
    {
        Console.WriteLine("Student ID: {0}, Score: {1}", item.id, item.score);
    }
    
    

Próximas etapas

Depois que você estiver familiarizado com os aspectos básicos de trabalhar com consultas no translation from VPE for Csharp, você estará pronto para ler a documentação e exemplos para o tipo específico de LINQ provedor de que seu interesse:

LINQ to SQL

LINQ to DataSet

LINQ to XML

LINQ para Objetos

Exemplos de C# de LINQ

Consulte também

Conceitos

Expressões de consulta LINQ (Guia de programação C#)

Recursos suplementares do LINQ

Outros recursos

LINQ (consulta integrada à linguagem)

Introdução ao LINQ in translation from VPE for Csharp