Usuário com melhor resposta
Excessão com LINQ.DYNAMIC

Pergunta
-
Bom dia amigos do MSDN estou inicializando um BI e achei que seria mais interessante utilizar LINQ para fazer meu acesso a dados pela praticidade e desempenho que "Acredito" ser um pouco melhor.
Estou com um problema que está me tirando de orbita a um pouco de tempo já.
Estou usando uma extensão do linq chamada DYNAMIC que dentre outras funcionalidades ela me da a possibilidade de criar uma string dinamicamente e passar no Where porem ao colocar o resultado em uma "VAR" está me retornando com um erro que não aparece nada alem de "NEW"
Alguém poderia me ajudar?Desde já agradeço
Segue abaixo o código para uma verificação.
Mundo.MUndo bd = new Mundo.MUndo(new MySqlConnection("Server=***;Database=***;User=***;Password=***"));
var query = (from c in bd.ContinentE
join p in bd.PaIs on c.ID equals p.ContinenteID
select new { Nome = p.PaIsNome, Continente = c.NomeContinentE } );
string continente = "\"Oceania\"";
string value = string.Format("Continente = {0}", continente);
query = query.AsQueryable().Where(value);
foreach (var item in query)
{
}
Respostas
-
Olá Pedro,
Agora que percebi a lógica do seu código =/
No caso, o Dynamic LINQ só funciona para consultas SQL... No seu código vc esta executando a clausula Where com os objetos já em memória...
Podemos tentar fazer assim:
var query = bd.ContinentE .Where("Continente=@0", continente) .Join(bd.PaIs, c => c.ID, p => p.ContinenteID, (c, p) => new {p.PaIsNome, c.NomeContinentE })
[]s!Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique- Marcado como Resposta Pedro Lins quinta-feira, 22 de março de 2012 04:36
Todas as Respostas
-
Olá Pedro,
Acredito que o correto seria o uso de aspas simples ao invés de aspas duplas.
string continente = "'Oceania'"; string value = string.Format("Continente = {0}", continente); query = query.AsQueryable().Where(value);
[]s!Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique -
Olá Fernando, obrigado por ter me respondido..
Porem se eu tirar as barrasa extensão do LINQ da um erro
"No property or field 'Oceania' exists in type '<>f__AnonymousType0`2'"se eu tirar as barras ele considera "Oceania" como field, coisa que na realidade nao é.
Mais alguma ideia?
desde já Agradeço.
-
Olá Pedro,
Pesquisei e achei duas possíveis soluções:
string continente = "Oceania"; string value = string.Format("Continente==\"{0}\"", continente);
query = query.AsQueryable().Where(value);
e
string continente = "Oceania";
query = query.AsQueryable().Where("Continente=@0", continente);
Referências:
http://www.beansoftware.com/ASP.NET-Tutorials/Dynamic-LINQ.aspx
http://imasters.com.br/artigo/18546/dotnet/dynamic_linq_consultas_dinamicas_utilizando_linq/
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique -
-
Olá Pedro,
Agora que percebi a lógica do seu código =/
No caso, o Dynamic LINQ só funciona para consultas SQL... No seu código vc esta executando a clausula Where com os objetos já em memória...
Podemos tentar fazer assim:
var query = bd.ContinentE .Where("Continente=@0", continente) .Join(bd.PaIs, c => c.ID, p => p.ContinenteID, (c, p) => new {p.PaIsNome, c.NomeContinentE })
[]s!Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique- Marcado como Resposta Pedro Lins quinta-feira, 22 de março de 2012 04:36
-
-
Grande Pedro! :)
Que bom que funcionou :)
Mas era realmente esse detalhe, o Dynamic LINQ serve para consultas no banco de dados, no caso ele estava sendo utilizado com registros que já estavam em memória.
Esperamos duas contribuições aqui no fórum!
Qualquer coisa é só falar!
Tamo junto!
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique