Usuário com melhor resposta
Page.Title dinâmico com Linq To Sql

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]
Será que precisa especificar mais códigos para que o evento Load Vincule os dados ou é necessário outro comando???
FROM [dbo].[T_Noticias] AS [t0]
WHERE [t0].[NoticiaID] = @p0
Agradeço a atenção dada ai pessoal!!!
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
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! -
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) -
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
-