Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Oenning

[Resolvido] Simulando a sintaxe IN do SQL Server no .Net

Recommended Posts

Obs.: Caso você não conheça Extension Methods, sugiro dar uma olhada neste tópico (http://forum.imasters.com.br/index.php?showtopic=332967) antes de prosseguir.

 

 

Imagine o cenário, você tem alguma rotina no seu código que possui diversas condições OR encadeadas, por exemplo:

string cargo = "Administrador";
if ((cargo == "Administrador") || (cargo == "Presidente") || (cargo == "Vice-Presidente") || (cargo == "Diretor"))
{
	//Você tem permissão de acesso
}
O que acontece se amanhã o faxineiro também tiver permissão? Lá vai você inserir mais uma condição, além do código ficar extremamente cansativo, é fácil se perder. Quem conhece linguagem de banco de dados sabe como é bom poder usar o IN.

Ao invés de

SELECT * FROM aluno WHERE sobrenome = 'Silva' OR sobrenome = 'Oenning' OR sobrenome = 'Souza'
Você escreve

SELECT * FROM aluno WHERE sobrenome IN ('Silva', 'Oenning', 'Souza')
Além de reduzar o tamanho da query, facilita a compreensão.

 

Seria interessante se tivessemos essa funcionalidade no .Net, mas desconheço algo semelhante.

Com extensions methods podemos chegar em um resultado bastante útil, veja a implementação.

public static class ObjectExtension
{
	public static bool In(this object obj, params object[] objects)
	{
		if (objects == null || obj == null)
			return false;

		object found = objects.FirstOrDefault(o => o.GetType().Equals(obj.GetType()) && o.Equals(obj));
		return (found != null);
	}
}

Veja que o meu método está inserindo um método chamado In em todas as instâncias que derivem de object. Tudo deriva de object, até mesmo as structs e enums, isso significa que qualquer variável terá esse novo comportamento. Veja alguns exemplos de uso.

 

string cargo = "Administrador";
if (cargo.In("Administrador", "Presidente", "Vice-Presidente", "Diretor"))
{
	//Você tem permissão de acesso
}

DateTime dataDePagamento = //Consulta do banco
if (dataDePagamento.In(DateTime.Today, new DateTime(2009, 3, 8)))
{
	//Você fez o pagamento hoje ou no dia da mulher, você terá desconto!
}

if (DateTime.Today.DayOfWeek.In(DayOfWeek.Saturday, DayOfWeek.Sunday))
{ 
	//Hoje é final de semana!
}

Espero que seja útil. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.