Vou mostra um recurso muito interessante, o Select do DataTable. Com ele é possível fazer busca dentro do DataTable, similar ao SQL.
Também é possível ordenar itens no DataTable usando o Select - .Select(filterExpression, orderby); Vamos aos exemplos.
Busca no DataTable com LIKE e OR
//Criar o DataTable
DataTable dt = new DataTable("contatos");
//Adicionar colunas no DataTable (nome e cidade)
dt.Columns.Add("nome");
dt.Columns.Add("cidade");
//Inserir dados no DataTable
dt.Rows.Add("Cesar", "Porto Alegre");
dt.Rows.Add("Cassiano", "São Paulo");
//Fazer busca no DataTable com LIKE e OR, com ordenação pelo nome
//A consulta no DataTable retornará um DataRow[]
DataRow[] rows = dt.Select("nome LIKE '%Cassiano%' OR nome = 'cesar'");
//Fazer um foreach no DataRow
foreach (DataRow row in rows)
{
//Responder na tela o resultado da busca
Response.Write(row["nome"]);
}
Busca no DataTable com Order By
//Criar o DataTable
DataTable dt = new DataTable("contatos");
//Adicionar colunas no DataTable (nome e cidade)
dt.Columns.Add("nome");
dt.Columns.Add("cidade");
//Inserir dados no DataTable
dt.Rows.Add("Cesar", "Porto Alegre");
dt.Rows.Add("Cassiano", "São Paulo");
//Fazer busca e ordenação pelo nome e cidade
//A consulta no DataTable retornará um DataRow[]
//.Select(where, orderby);
DataRow[] rows = dt.Select("nome = 'Cassiano' AND cidade = 'São Paulo'", "nome ASC, cidade DESC");
//Fazer um foreach no DataRow
foreach (DataRow row in rows)
{
//Responder na tela o resultado da busca
Response.Write(row["nome"]);
}
Usar o método CopyToDataTable para converter um array de DataRow para DataTable.
dt = dt.Select("nome LIKE 'Cassiano'").CopyToDataTable();
Fazer uma consulta dentro do DataSet.
Alguns desenvolvedores confundem e acham que a consulta é feita dentro do DataSet, mas na verdade é no DataTable, o DataSet nestes casos é o conjunto de DataTables.
Para ficar mais claro, abaixo vou mostra um exemplo de como fazer uma busca no DataSet (DataTable).
//Criar o DataTable
DataTable dt = new DataTable("contatos");
//Adicionar colunas no DataTable (nome e cidade)
dt.Columns.Add("nome");
dt.Columns.Add("cidade");
//Inserir dados no DataTable
dt.Rows.Add("Cesar", "Porto Alegre");
dt.Rows.Add("Cassiano", "São Paulo");
//Criar um DataSet
DataSet ds = new DataSet();
//Inserir o DataTable no DataSet
ds.Tables.Add(dt);
//Fazer busca dentro do DataSet (DataTable)
//Perceba que esta consulta vai retornar novamente um DataTable
DataTable dtResultado = ds.Tables[0].Select("nome LIKE '%Cassiano%'", "nome ASC").CopyToDataTable();
//Remover do DataSet o DataTable atual
ds.Tables.Remove(dt);
//Adicionar o novo DataTable com o resultado da consulta
ds.Tables.Add(dtResultado);
//Fazer um for para pegar o itens do DataSet
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
//Responder na tela o resultado da busca
Response.Write(ds.Tables[0].Rows[i]["nome"]);
}