Select com Linq em DataTable

Segue abaixo um pequeno exemplo de como fazer um select com Linq em um DataTable, é bem simples.

DateTime dtMax = Convert.ToDateTime(((
   from DataRow dr in dt.Rows
orderby Convert.ToDateTime(dr["Posting Date"]) descending
 select dr).FirstOrDefault()["Posting Date"]));
Anúncios

Classes anônimas

As vezes precisamos criar classes temporárias sem precisar adicionar no projeto pois não vamos utiliza-las mais tarde, podemos cria-las dinamicamente no código, é simples, veja a seguir:

As propriedades serão sempre publicas e seus valores poderão ser alterados.

 

Referenciando métodos server-side no HTML da pagina

Quando precisamos adicionar controles HTML na pagina, por exemplo, dentro de um componente asp .net podemos referenciar métodos server-side através de comandos java script, porem isso fica um pouco complicado para fazer “na mão”. O método apresentado a seguir captura os eventos de Postback, neste caso indica o(s) método(s) que serão usados na pagina de acordo com o parâmetro [eventArgument]:

        public void RaisePostBackEvent(string eventArgument)
        {
            switch (eventArgument)
            {
                case "MetodoTeste1":
                    MetodoTeste1();
                    break;
                case "MetodoTeste2":
                    MetodoTeste2();
                    break;
            }
        }
        protected void MetodoTeste1()
        {
            // escopo
        }

        protected void MetodoTeste2()
        {
            // escopo
        }

O método [Render] escreve o que sera desenhado (renderizado) no browser. Com a alteração (override) deste método é possível inserir mais controles na pagina HTML.  O código a seguir insere na pagina HTML dois links que executarão os métodos server-side [MetodoTeste1] e [MetodoTeste2] respectivamente de acordo com o que esta referenciado no método [RaisePostBackEvent].

        protected override void Render(HtmlTextWriter writer)
        {
            const string input = "<a onclick=\"{0};\">{1}</a>";

            writer.Write(input, Page.ClientScript.GetPostBackEventReference(this, "MetodoTeste1"), " Descrição MetodoTeste1 ");
            writer.Write(input, Page.ClientScript.GetPostBackEventReference(this, "MetodoTeste2"), " Descrição MetodoTeste2 ");

            base.Render(writer);
        }

Assim quando clicar no link [Descrição MetodoTeste1] o método [MetodoTeste1] sera executado no servidor.

Fatia de registros

Método responsavel por retornar uma fatia de registros de uma lista. Os parâmetros “FimPagina”, “TotalRegistros”, “InicioPagina” e “QuantidadeRegistros” podem ser definidos separadamente.

        public IEnumerable<T> Fatia<T>(IEnumerable<T> lista)
        {
            if (FimPagina != TotalRegistros)
                FimPagina = InicioPagina + QuantidadeRegistros;

            int index = 0;
            int count;

            if (lista != null)
            {
                if (lista is ICollection<T>)
                    count = ((ICollection<T>)lista).Count;
                else if (lista is ICollection)
                    count = ((ICollection)lista).Count;
                else
                    count = lista.Count();

                if (InicioPagina < 0)
                    InicioPagina += count;

                if (FimPagina < 0)
                    FimPagina += count;

                foreach (var item in lista)
                {
                    if (index >= FimPagina)
                        yield break;

                    if (index >= InicioPagina)
                        yield return item;

                    ++index;
                }
            }
        }

O comando YIELD é utilizado em métodos que retornam enumeradores, dentro de uma interação ele pode ser usado junto com RETURN ou BREAK, retornando, por exemplo, parte dos itens de uma lista.