2010-05-12 2 views
1

У меня возникла проблема с библиотекой Dynamic Linq. Я получаю следующую ошибку: «ParserException был необработанным кодом пользователя») или «,». У меня есть Dicitionary, и я хочу создать запрос на основе этого словаря. Поэтому я просматриваю свой словарь и добавляю к построителю строк «PersonId = (GUID FROM DICTIONARY). Я думаю, что проблема заключается в том, что я добавляю к PersonId по какой-то причине, я не могу преобразовать строку guid в Guid, поэтому динамическая библиотека не сбой.Динамические ошибки Linq Library Guidations

Я пробовал это, чтобы преобразовать мою строку 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)); 

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

ответ

2

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

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

Это в древней, но '@ 1' должен быть' @ 0 '(они равны нулю индексированные) – JoeBrockhaus

1

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

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

Для сравнения 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(); 
+1

Подтверждено это работает с Entity Framework. – CodeGrue

+0

Подтверждена работа с EntityFramework 6.1 также (версии имеют значение с EF lol) – TravisWhidden

Смежные вопросы