Domanda

Sto avendo un problema con il LINQ Dynamic Library. Ho ottenere un il seguente errore "ParserException è stata gestita dal codice utente") 'o' '". Ho un Dicitionary e voglio creare una query sulla base di questo dizionario. Così ho ciclo attraverso il mio dizionario e aggiungere ad un costruttore di archi "PersonId = (GUID DA DIZIONARIO). Credo che il problema è se io aggiungo a PersonId per qualche motivo non riesco a convertire il mio guid stringa in un Guid quindi la libreria dinamica non crash.

Ho provato questo per convertire il mio guid stringa in un guid, ma senza fortuna.

query.Append("(PersonId = Guid(" + person.Key + ")");

query.Append("(PersonId = " + person.Key + ")");

Sto usando CONTRO 2010 RTM e RIA servizi, nonché l'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));

Si prega di aiuto, e se siete a conoscenza di un modo migliore di fare questo sono aperto a suggerimenti.

È stato utile?

Soluzione

Utilizzare una query con parametri, per esempio:.

var query = this.ObjectContext.Persons.Where(
     "PersonId = @1", new [] { person.Key } );

Altri suggerimenti

Per confronto GUID con proprietà utilizzare LINQ dinamica query e Eguali () metodo come nel campione fornito.

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();

Hai provato (avviso l'extra ')').

   query.Append("(PersonId = Guid(" + person.Key + "))");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top