using System;
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Diagnostics;
public class Pessoa {
public string Nome { get; set; }
public DateTime? DataNascimento { get; set; }
public int? Cpf { get; set; }
public Pessoa(string nome, DateTime? dataNascimento = null, int? cpf = null){
Nome = nome;
DataNascimento = dataNascimento;
Cpf = cpf;
}
}
public class App {
public static void Main(string[] args) {
var limiteDeItens = 1_000_000;
var pessoas = new List<Pessoa>(limiteDeItens);
var tempo = new Stopwatch();
tempo.Start();
//preenche a lista
for(var i = 0; i < limiteDeItens; i++) {
pessoas.Add(new Pessoa("Pessoa" + i.ToString()));
}
tempo.Stop();
WriteLine($"Preencher a lista em ms: {tempo.ElapsedMilliseconds}");
// LINQ na forma declarativa
tempo.Restart();
var resultado1 = from pessoa in pessoas
where pessoa.Nome.Contains('9')
select pessoa;
tempo.Stop();
WriteLine($"Montar o LINQ declarativo em Ticks: {tempo.ElapsedTicks}");
// LINQ usando sintaxe tradicional
tempo.Restart();
var resultado2 = pessoas.Where(x => x.Nome.Contains('9'));
tempo.Stop();
WriteLine($"Montar o LINQ imperativo em Ticks: {tempo.ElapsedTicks}");
// transferir todo resultado para uma lista apenas para efeito de comparação
var lista1 = new List<Pessoa>(limiteDeItens);
tempo.Restart();
foreach(var pessoa in resultado1) {
lista1.Add(pessoa);
}
tempo.Stop();
WriteLine($"Transferir uma lista para outra com a primeira expressão em ms: {tempo.ElapsedMilliseconds}");
var lista2 = new List<Pessoa>(limiteDeItens);
tempo.Restart();
foreach(var pessoa in resultado2) {
lista2.Add(pessoa);
}
tempo.Stop();
WriteLine($"Transferir uma lista para outra com a segunda expressão em ms: {tempo.ElapsedMilliseconds}");
}
}
//https://pt.stackoverflow.com/q/14212/101