动态Linq库Guid异常

时间:2010-05-12 19:29:45

标签: entity-framework dynamicquery

我遇到了动态Linq库的问题。我收到以下错误“ParserException未被用户代码处理”)“或','”。我有一个Dicitionary,我想基于这个字典创建一个查询。所以我遍历我的字典并附加到字符串构建器“PersonId =(GUID FROM DICTIONARY)。我认为问题是因为某些原因我附加到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));

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

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:2)

使用参数化查询,例如:

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

答案 2 :(得分:1)

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

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