O objeto ValuePairItem é o "container" usado para armazenar as condições que serão consumidas pelo SelectBuilder para gerar a query dinamicamente.

Usando o ValuePairItem é possível criar de forma simples, mas principalmente organizada e segura suas query's que dependem de parâmetros sem ficar fazendo concatenações, ou verificando valores e claro, evitar falzer algo do tipo " where 1=1 ". Veja abaixo alguns exemplos de utilização do ValuePairItem.

Sempre que vamos utilizar o ValuePairItem, precisamos declarar os objetos Command e o SelectBuilder.

//
// Declaração dos objetos
//
var command = new Command();
var query = new SelectBuilder();

Definimos os campos que serão selecionados em nossa consulta

//
// Adicionamos os campos que queremos retornar na seleção
//
query.Select.Add("Name, StateId, ShortName");

Fazemos nossos testes para criar nossa query dinâmica (que afetará nosso Where)

* Fazendo uma condição de Like

//
// Perceba que podemos usar os caracteres curinga concatenados
// na string de pesquisa antes de adicionarmos o parâmetro
//
if (!string.IsNullOrEmpty(Name))
{
query.Where.Add(new ValuePairItem("Name", "@Name", " LIKE "));
command.AddWithValue("Name", "%" + Name + "%");
}

* Fazendo uma condição de string

//
// Procurando uma string idêntica
//
if (!string.IsNullOrEmpty(Name))
{
query.Where.Add(new ValuePairItem("Name", "@Name", " = "));
command.AddWithValue("Name", Name);
}

* Fazendo uma condição de inteiros

//
// Podemos encontrar as cidades de nosso
// banco passando um código específico
//
if ( CidadeId > 0 )
{
query.Where.Add(new ValuePairItem("CityId", "@CityId", " = "));
command.AddWithValue("CityId", CityId);
}

* Fazendo uma condição de período de datas

//
// Procurar registros que estejam dentro de uma
// faixa de datas por exemplo usando between
//
if ( MyDate > DateTime.MinValue )
query.Where.Add(new ValuePairItem("Date", "@StartDate AND @EndDate", " BETWEEN "));
command.AddWithValue("StartDate", DateTime.Now.Date);
command.AddWithValue("EndDate", MyDate.Date);
}

* Fazendo uma condição de data

//
// Pesquisando registros com data
// anterior a uma data específica
//
if ( MyDate > DateTime.MinValue )
{
query.Where.Add(new ValuePairItem("Date", "@EndDate", " =< "));
command.AddWithValue("EndDate", MyDate.Date);
}

* Fazendo uma condição de diferença

//
// Todas os objetos que não pertençam
// ao estado de código 14
//
query.Where.Add(new ValuePairItem("StateId", "13", "<>"));

* Fazendo uma condição comparando nulos

//
// Todos os objetos que tenham o StateId for NULL
//
query.Where.Add(new ValuePairItem("StateId", "NOT NULL", " IS "));

Ou ainda

//
// Forma curta
//
query.Where.Add(new ValuePairItem("StateId", "NULL", " IS "));

Definimos se vamos usar uma ordenação (que irá gerar nosso Order By)

//
// Podemos testar se vamos adicionar ou não um OrderBy
//
if ( ! string.IsNullOrEmpty(Ordernation))
{
query.OrderBy = Ordernation;
}

Executamos então nosso Command

//
// Execução do command
//
return (DataTable)command.ExecuteQuery(query.ToString(), ReturnType.DataTable);

Até a próxima!

Last edited Mar 9, 2010 at 1:42 PM by ivanpaulovich, version 1

Comments

No comments yet.