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’]