none
Page.Title dinâmico com Linq To Sql RRS feed

  • Pergunta

  • Bom dia Pessoal!

    Tenho uma tabela T_Noticias que tem a campo Titulo preenchido com seus dados. e NoticiaID como sua chave primária. A página de notícia funciona legal, mas quero incrementar o page.Title com Linq To Sql e quase funcionou
    Aqui está o esquema:

    public partial class noticia : System.Web.UI.Page
    {
        RTDataContext db = new RTDataContext();
        protected void Page_Load(object sender, EventArgs e)
        {
            int intNoticia = Int32.Parse(Request.QueryString["noticiaid"]);
            var dados = from p in db.T_Noticias
                        where p.NoticiaID == intNoticia
                        select new { p.Titulo };
            Page.Title = dados.ToString();
        }
    }
    Pelo código parece que tudo vai funcionar bem. Porém, quando carrego a página notícia.aspx?noticiaid= mais o parâmetro da notícia, ele retorna isso aqui no título do navegador:

    SELECT [t0].[Titulo]
    FROM [dbo].[T_Noticias] AS [t0]
    WHERE [t0].[NoticiaID] = @p0
    Será que precisa especificar mais códigos para que o evento Load Vincule os dados ou é necessário outro comando???
    Agradeço a atenção dada ai pessoal!!!
    sábado, 5 de setembro de 2009 05:29

Respostas

  • Claudinei,

    Isso acontece pois o que você esta fazendo é criar apenas uma query, sem executar. De uma maneira bem grossa é a mesma coisa que você concatenar um select em uma string e atribuir seu conteudo ao Page.Title.
    Se você debugar seu código, vai perceber que o conteudo da variavel dados é um IQueryble<object> e não o objeto anonimo que você efetivamente esta criando no select.
    As sugestões postadas pelos outros usuarios resolvem seu problema pois em ambas a query é executada com os extension methods "Single" ou "SingleOrDefault". Caso você queira usar a sintaxe de query, pode fazer o seguinte:

            var dados = (from p in db.T_Noticias
                        where p.NoticiaID == intNoticia
                        select p.Titulo).SingleOrDefault();
            Page.Title = dados;
    Espero ter ajudado!

    []s, Victor Arias - Desenvolvedor .NET
    • Sugerido como Resposta Victor Arias sábado, 5 de setembro de 2009 16:56
    • Marcado como Resposta Makepage222 sábado, 5 de setembro de 2009 22:02
    sábado, 5 de setembro de 2009 16:28

Todas as Respostas

  • Bom dia Claudinei,

    Segue uma sugestão:


    public
    partial class noticia : System.Web.UI.Page
    {
        RTDataContext db = new RTDataContext();

        protected void Page_Load(object sender, EventArgs e)
        {
            int intNoticia = Int32.Parse(Request.QueryString["noticiaid"]);

            string titulo= db.Noticias.Where(n => n.NoticiaID == intNoticia).Single().Titulo;

            Page.Title = titulo;
        }
    }

    Ivan Ribeiro. Se a resposta ajudou, por favor marque-a como útil. Obrigado!
    sábado, 5 de setembro de 2009 11:27
  • Bom dia Claudinei, 

    Segue mais uma sugestão:


    public
     partial class noticia : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Page.Title = GetTitulo();
        }

        protected string GetTitulo()
        {
    int intNoticia = Int32.Parse(Request.QueryString["noticiaid"]);
    using(RTDataContext db = new RTDataContext())
    {
    return db.Noticias.SingleOrDefault(n => n.NoticiaID == intNoticia).Titulo;
    }
         }
    }

    Programador Web C# .NET
    Email: ivan@faqsite.com.br
    Portifólio: http://www.faqsite.com.br
    Cel: +55(61) 8406-9719
    Fixo: +55(61) 3395-3383

    "Porque Deus amou o mundo de tal maneira, que deu seu único Filho para que todo aquele que nele crê, não pereça, mas tenha a vida eterna." (João 3:16)

    sábado, 5 de setembro de 2009 13:20
  • Claudinei,

    Isso acontece pois o que você esta fazendo é criar apenas uma query, sem executar. De uma maneira bem grossa é a mesma coisa que você concatenar um select em uma string e atribuir seu conteudo ao Page.Title.
    Se você debugar seu código, vai perceber que o conteudo da variavel dados é um IQueryble<object> e não o objeto anonimo que você efetivamente esta criando no select.
    As sugestões postadas pelos outros usuarios resolvem seu problema pois em ambas a query é executada com os extension methods "Single" ou "SingleOrDefault". Caso você queira usar a sintaxe de query, pode fazer o seguinte:

            var dados = (from p in db.T_Noticias
                        where p.NoticiaID == intNoticia
                        select p.Titulo).SingleOrDefault();
            Page.Title = dados;
    Espero ter ajudado!

    []s, Victor Arias - Desenvolvedor .NET
    • Sugerido como Resposta Victor Arias sábado, 5 de setembro de 2009 16:56
    • Marcado como Resposta Makepage222 sábado, 5 de setembro de 2009 22:02
    sábado, 5 de setembro de 2009 16:28
  • Pessoal, testei a queries de todos e funcionou todas as três de primeira.
    Valeu mesmo pelas respostas Vitor, Ivan e E Ribeiro!!!!
    sábado, 5 de setembro de 2009 22:04