Exceções dinâmicas da Biblioteca Linq
-
26-09-2019 - |
Pergunta
Estou tendo um problema com a biblioteca LINQ dinâmica. Recebo o seguinte erro "Parserexception não foi considerado pelo código do usuário ')" ou', '". Eu tenho um dicicionário e quero criar uma consulta com base neste dicionário. Então, visto pelo meu dicionário e apego a um construtor de cordas "PersonID = (GUID do dicionário). Eu acho que o problema é que eu preendo o PersonID, por algum motivo, não consigo converter meu guia de string em um GUID para que a biblioteca dinâmica não trava.
Eu tentei isso para converter meu String Guid em um GUID, mas sem sorte.
query.Append("(PersonId = Guid(" + person.Key + ")");
query.Append("(PersonId = " + person.Key + ")");
Estou usando os serviços VS 2010 RTM e RIA, bem como o Entity Framework 4.
//This is the loop I use
foreach (KeyValuePair<Guid, PersonDetails> person in personsDetails)
{
if ((person.Value as PersonDetails).IsExchangeChecked)
{
query.Append("(PersonId = Guid.Parse(" + person.Key + ")");
}
}
//Domain service call
var query = this.ObjectContext.Persons.Where(DynamicExpression.ParseLambda<Person, bool>(persons));
Por favor, ajude e, se você souber de uma maneira melhor de fazer isso, estou aberto a sugestões.
Solução
Use uma consulta parametrizada, por exemplo:
var query = this.ObjectContext.Persons.Where(
"PersonId = @1", new [] { person.Key } );
Outras dicas
Para a comparação do GUID com as propriedades dinâmicas de consulta de uso do LINQ e o método iguals (), como na amostra fornecida.
var items = new[]
{
new { Id = Guid.Empty },
new { Id = Guid.NewGuid() },
new { Id = Guid.NewGuid() },
new { Id = Guid.NewGuid() }
};
var result = items.AsQueryable()
.Where("Id.Equals(@0)", Guid.Empty)
.Any();
Você tentou (percebeu o extra ')').
query.Append("(PersonId = Guid(" + person.Key + "))");