terça-feira, 17 de fevereiro de 2009

.NET Framework 3.5 - LINQ to Objects

O termo [LINQ to Objects] se refere ao uso de LINQ queries diretamente com qualquer coleção IEnumerable ou IEnumerable(T) sem o uso de qualquer provedor intermediário ou API, como no caso do [LINQ to SQL] ou [LINQ to XML].

Assim como no uso dos outros recursos do LINQ (SQL, XML e DataSet) LINQ to Objects proporciona uma mudança significativa no desenvolvimento, de forma a simplificar a codificação, comparando por exemplo, ao uso do foreach.

Em adição, LINQ queries oferecem três vantagens principais sobre os tradicionais foreach loops:

1 - Eles são mais concisos e legíveis, especialmente quando filtram múltiplas condições;
2 - Eles provêem mais poder de filtragem, ordenação e agrupamento com um mínimo de codificação;
3 - Eles podem ser portados para outras fontes de dados com pequena ou nenhuma modificação.

O exemplo a seguir mostra uma query sobre um ArrayList. Note que este exemplo usa inicializadores de objeto quando o código chama o método [Add], mas isto não é requerido.


[Visual Basic]
Imports System.Collections
Imports System.Linq

Module Module1

Public Class Student
Public FirstName As String
Public LastName As String
Public Scores As Integer()
End Class

Sub Main()

Dim student1 As New Student With {.FirstName = "Svetlana", _
.LastName = "Omelchenko", _
.Scores = New Integer() {98, 92, 81, 60}}
Dim student2 As New Student With {.FirstName = "Claire", _
.LastName = "O'Donnell", _
.Scores = New Integer() {75, 84, 91, 39}}
Dim student3 As New Student With {.FirstName = "Cesar", _
.LastName = "Garcia", _
.Scores = New Integer() {97, 89, 85, 82}}
Dim student4 As New Student With {.FirstName = "Sven", _
.LastName = "Mortensen", _
.Scores = New Integer() {88, 94, 65, 91}}

Dim arrList As New ArrayList()
arrList.Add(student1)
arrList.Add(student2)
arrList.Add(student3)
arrList.Add(student4)

' Use an explicit type for non-generic collections
Dim query = From student As Student In arrList _
Where student.Scores(0) > 95 _
Select student

For Each student As Student In query
Console.WriteLine(student.LastName & ": " & student.Scores(0))
Next
' Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.")
Console.ReadKey()
End Sub

End Module
' Output:
' Omelchenko: 98
' Garcia: 97




[C#]
using System;
using System.Collections;
using System.Linq;

namespace NonGenericLINQ
{
public class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int[] Scores { get; set; }
}

class Program
{
static void Main(string[] args)
{
ArrayList arrList = new ArrayList();
arrList.Add(
new Student
{
FirstName = "Svetlana", LastName = "Omelchenko", Scores = new int[] { 98, 92, 81, 60 }
});
arrList.Add(
new Student
{
FirstName = "Claire", LastName = "O’Donnell", Scores = new int[] { 75, 84, 91, 39 }
});
arrList.Add(
new Student
{
FirstName = "Sven", LastName = "Mortensen", Scores = new int[] { 88, 94, 65, 91 }
});
arrList.Add(
new Student
{
FirstName = "Cesar", LastName = "Garcia", Scores = new int[] { 97, 89, 85, 82 }
});

var query = from Student student in arrList
where student.Scores[0] > 95
select student;

foreach (Student s in query)
Console.WriteLine(s.LastName + ": " + s.Scores[0]);

// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
}
/* Output:
Omelchenko: 98
Garcia: 97
*/

________________________________
101 Visual Basic LINQ Samples! - http://msdn.microsoft.com/en-us/vbasic/bb688088.aspx

Um comentário:

  1. Oi Gilberto,
    Precisava muito falar com você. Poderia enviar um email para carlos.junior@itgroup.com.br ?
    Grato,
    Carlos Amorim Junior

    ResponderExcluir

<< Ao enviar um comentário, favor clicar na opção [Enviar por e-mail comentários de acompanhamento para gtezini@gmail.com] >>