1

我遇到了动态 Linq 库的问题。我收到以下错误“ParserException is unhandled by user code ')”或 ','”。我有一个字典,我想根据这个字典创建一个查询。所以我遍历我的字典并附加到一个字符串生成器“PersonId =(字典中的 GUID)。我认为问题是我附加到 PersonId 出于某种原因我似乎无法将我的字符串 guid 转换为 Guid,因此动态库不会崩溃。

我已经尝试将我的字符串 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));

请提供帮助,如果您知道更好的方法,我愿意接受建议。

4

3 回答 3

5

对于与动态 linq 的 GUID 比较,请使用查询属性和提供的示例中的 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();
于 2012-10-10T12:50:50.407 回答
2

使用参数化查询,例如:

var query = this.ObjectContext.Persons.Where(
     "PersonId = @1", new [] { person.Key } );
于 2010-05-12T20:33:41.220 回答
1

你试过吗(注意额外的 ')' )。

   query.Append("(PersonId = Guid(" + person.Key + "))");
于 2010-05-12T20:36:52.600 回答