Olá pessoal, tudo bom?
Segue um post rápido demonstrando como fazer uma seleção “not in” usando o LINQ.
Para o exemplo criei uma classe Cliente com os atributos Código e Nome. Derivando dessa classe tenho uma lista com todos os clientes cadastrados e outra com clientes negativados, sendo que meu objetivo, é produzir uma terceira lista apenas com o clientes que não estão negativados, ou seja, os “ficha limpa” 🙂 Vamos aos fontes:
Classe Cliente.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ExemploLinq { public class Cliente { private int _codigo; public int Codigo { get { return _codigo; } set { _codigo = value; } } private string _nome; public string Nome { get { return _nome; } set { _nome = value; } } } }
Classe ClienteControladora.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ExemploLinq { public class ClienteControladora { public ClienteControladora() { } /// <summary> /// Retorna uma lista com todos os clientes cadastrados /// </summary> /// <returns></returns> public List<Cliente> ObterClientes() { //Monta uma lista ficticia com todos os clientes cadastrados List<Cliente> todosClientes = new List<Cliente>(); todosClientes.Add(new Cliente { Codigo = 1, Nome = "Cliente 1" }); todosClientes.Add(new Cliente { Codigo = 2, Nome = "Cliente 2" }); todosClientes.Add(new Cliente { Codigo = 3, Nome = "Cliente 3" }); todosClientes.Add(new Cliente { Codigo = 4, Nome = "Cliente 4" }); todosClientes.Add(new Cliente { Codigo = 5, Nome = "Cliente 5" }); todosClientes.Add(new Cliente { Codigo = 6, Nome = "Cliente 6" }); return todosClientes; } /// <summary> /// Retorna uma lista com todos os clientes negativados /// </summary> /// <returns></returns> public List<Cliente> ObterClientesNegativados() { //Monta uma lista ficticia com todos os clientes negativados List<Cliente> negativadosClientes = new List<Cliente>(); negativadosClientes.Add(new Cliente { Codigo = 3, Nome = "Cliente 3" }); negativadosClientes.Add(new Cliente { Codigo = 5, Nome = "Cliente 5" }); return negativadosClientes; } /// <summary> /// Retorna uma lista com todos os clientes Ficha Limpa, ou seja, os não negativados /// </summary> /// <returns></returns> public List<Cliente> ObterClientesFichaLimpa() { //Exemplo de instrução "not in" do select usando Linq var dados = (from c1 in ObterClientes() where !(from c2 in ObterClientesNegativados() select c2.Codigo).Contains(c1.Codigo) select c1).ToList(); return dados; } } }
Repare que na classe ClienteControladora há um método chamado ObterClientesFichaLimpa() que retorna um List
Grande abraço,
Eduardo Henrique Rizo
[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]