1

Dynamic Linq ライブラリに問題があります。「ParserException was unhandled by user code ')」または「,'」というエラーが表示されます。辞書があり、この辞書に基づいてクエリを作成したいので、辞書をループして文字列ビルダーに追加します。 "PersonId = (辞書からの GUID)。問題は、動的ライブラリがクラッシュしないように、文字列 GUID を GUID に変換できないように見える何らかの理由で PersonId に追加したことだと思います。

文字列GUIDをGUIDに変換するためにこれを試しましたが、うまくいきません。

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

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

VS 2010 RTM と RIA サービス、および 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));

助けてください。これを行うためのより良い方法を知っている場合は、提案をお待ちしています。

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 に答える