2010-05-12 62 views
1

我遇到动态Linq库的问题。我得到了一个下面的错误“ParserException被用户代码未处理”)“或','”我有一个Dicitionary,我想创建一个基于这个字典的查询,所以我通过我的字典循环并追加到一个字符串构建器“PersonId =(GUID FROM DICTIONARY)。我认为问题是我追加到PersonId出于某种原因,我似乎无法将我的字符串GUID转换为GUID,因此动态库不会崩溃。动态Linq库指导例外

我已经尝试过将我的字符串GUID转换为GUID,但没有运气。

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

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

我使用VS 2010 RTM和RIA服务以及实体框架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 2016-10-05 05:26:33

1

你尝试(注意额外的 ')')。

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

对于具有动态LINQ查询使用性能和的Equals GUID的比较()方法等所提供的样本。

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

确认这适用于实体框架。 – CodeGrue 2013-03-15 20:18:50

+0

已确认与EntityFramework 6.1一起工作(版本与EF大声笑有关) – TravisWhidden 2015-08-10 21:01:38