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(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(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(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