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.

Foi útil?

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 + "))");
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top