سؤال

أواجه مشكلة في مكتبة LINQ الديناميكية. أحصل على الخطأ التالي "تم عدم تعرض Parserexception من قبل رمز المستخدم") "أو" ، ". "PersonId = (GUID من القاموس). أعتقد أن المشكلة هي أني تم إلحاقها بـ PersonId لسبب ما ، لا يمكنني تحويل سلسلتي إلى GUID حتى لا تصطدم المكتبة الديناميكية.

لقد حاولت هذا لتحويل سلسلة GUID إلى GUID ، لكن لا حظ.

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

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

أنا أستخدم خدمات RTM و RIA لعام 2010 وكذلك إطار الكيان 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));

الرجاء المساعدة ، وإذا كنت تعرف طريقة أفضل للقيام بذلك ، فأنا منفتح على الاقتراحات.

هل كانت مفيدة؟

المحلول

استخدم استعلام معلمة ، على سبيل المثال:

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

نصائح أخرى

لمقارنة GUID مع LINQ الديناميكي ، استخدم خصائص الاستعلام وطريقة متساوية () كما في العينة المقدمة.

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();

هل حاولت (لاحظ الإضافية ")).

   query.Append("(PersonId = Guid(" + person.Key + "))");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top