سؤال

ولدي XElement مع القيم للبيانات وهمية.

ولدي تعبير الاستعلام عن XML:

Expression<Func<XElement, bool>> simpleXmlFunction = 
    b => int.Parse(b.Element("FooId").Value) == 12;

واستخدامها في:

var simpleXml = xml.Elements("Foo").Where(simpleXmlFunction).First();

والخطأ وقت التصميم هو:

والحجج نوع لطريقة "System.Linq.Enumerable.Where (System.Collections.Generic.IEnumerable، System.Func) 'لا يمكن الاستدلال على ذلك من الاستخدام. محاولة تحديد الحجج نوع صراحة '

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

وأيضا، لا يوجد لديك طريقة مواز لوظيفة حقيقية ضد الكيان الإطار هذه المسألة. ما هو غير صحيح مع الإصدار LINQ إلى XML؟

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

المحلول

لا تجعل simpleXmlFunction تعبير <ظائفها >. جعله ظائفها . وهذا ما هو متوقع مندوبا ل.حيث.

Func<XElement, bool> simpleXmlFunction =
     new Func<XElement, bool>(b => int.Parse(b.Element("FooId").Value) == 12);

نصائح أخرى

وأعتقد أن الإجابة كاملة تتضمن الإجابة السابقة، تعليق ديفيد مورتون، ومقتطف الشفرة المحدثة:

وتنفيذ .حيث لIQueryable يختلف عن تنفيذ .حيث لIEnumerable. IEnumerable.Where تتوقع:

Func<XElement, bool> predicate

ويمكنك تجميع الدالة من التعبير لديك عن طريق القيام:

Expression<Func<XElement, bool>> simpleXmlExpression = 
    b => int.Parse(b.Element("FooId").Value) == 12; 

Func<XElement, bool> simpleXmlFunction = simpleXmlExpression.Compile();

var simpleXml = xml.Elements("Foo").Where(simpleXmlFunction).First();

وهذا سوف يسمح لك أن ننظر إلى شجرة التعبير ولدت واستخدام النموذج جمعت الاستعلام عن جمع أكس.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top