Динамические исключения из библиотеки Linq Guid - PullRequest
1 голос
/ 12 мая 2010

У меня проблема с динамической библиотекой Linq. Я получаю следующую ошибку «ParserException не обрабатывается кодом пользователя«) »или«, ». У меня есть словарь, и я хочу создать запрос на основе этого словаря. Поэтому я перебираю свой словарь и добавляю к строителю строк "PersonId = (РУКОВОДСТВО ИЗ СЛОВАРЯ). Я думаю, что проблема в том, что по какой-то причине я добавляю в PersonId то, что не могу конвертировать мой guid-строку в Guid, чтобы динамическая библиотека не вылетала.

Я пытался конвертировать мой проводник в guid, но не повезло.

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

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

Я использую VS 2010 RTM и RIA Services, а также 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));

Пожалуйста, помогите, и если вы знаете лучший способ сделать это, я открыт для предложений.

Ответы [ 3 ]

5 голосов
/ 10 октября 2012

Для сравнения GUID с динамическим linq используйте свойства запроса и метод Equals (), как в приведенном примере.

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();
2 голосов
/ 13 мая 2010

Используйте параметризованный запрос, например ::

var query = this.ObjectContext.Persons.Where(
     "PersonId = @1", new [] { person.Key } );
1 голос
/ 13 мая 2010

Вы пробовали (обратите внимание на дополнительные ')').

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