IQueryable مقابل IEnumerable مع لامبدا، التي تختار؟

StackOverflow https://stackoverflow.com/questions/245343

  •  05-07-2019
  •  | 
  •  

سؤال

وأفعل المزيد والمزيد من التمرين مع امدا لكنني لا معرفة لماذا في وقت سبيل المثال استخدام .AsQueryable(); التي تستخدم IQueryable وفي وقت ما حذفت .AsQueryable(); واستخدام IEnumerable.

ولقد قرأت MSDN لكنني لا أرى كيف "تنفيذ شجرة التعبير" هو ميزة على ذلك.

ويمكن لأي شخص أن يشرح لي؟

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

المحلول

وIQueryable تنفذ IEnumerable، لذلك الحق قبالة الخفافيش، مع IQueryable، يمكنك أن تفعل كل ما يمكنك القيام به مع IEnumerable. IQueryables التعامل مع تحويل بعض التعبير امدا إلى الاستعلام عن مصدر البيانات الأساسي - وهذا يمكن أن يكون قاعدة بيانات SQL، أو مجموعة الكائن.

والأساس، ويجب عادة يكن لديك لرعاية اتجاه واحد أو الآخر إذا كان هو IQueryable، أو IEnumerable.

نصائح أخرى

وكمستخدم، يمكنك عموما لا ينبغي أن تهتم، انها حقا عن منفذة من مصدر البيانات. إذا موفري البيانات فقط ينفذ IEnumerable، تقومون به أساسا LINQ إلى تنفيذ الأشياء، أي انها في عملية الذاكرة على مجموعات. يوفر IQueryable مصدر البيانات القدرة على ترجمة شجرة التعبير إلى تمثيل بديل للتنفيذ بمجرد تنفيذ التعبير (عادة عن طريق التعداد)، وهو ما مصمم الرسم Linq2SQL، Linq2Xml وLinq2Entities القيام به.

والمرة الوحيدة التي أستطيع أن أرى رعاية المستخدم النهائي، وإذا كانوا يرغبون في تفقد شجرة التعبير التي سيتم تنفيذها، منذ IQueryable يعرض التعبير. استخدام آخر يمكن أن يتفقد موفر. ولكن كلا من هذه السيناريوهات يجب أن يكون حقا محفوظة لالمنفذين من مقدمي استفسار آخر وتريد تحويل التعبير. وجهة ينق هو أنك لا ينبغي أن نهتم تنفيذ إعدام التعبير لاستخدامها.

وأنا أتفق مع آرني كلاسن، هناك حالات عندما تحتاج إلى التفكير في implmentatoin الأساسية التي توفرها مصادر البيانات. على سبيل المثال تحقق هذا إضافة حيث يبين كيف أن SQL التي تم إنشاؤها بواسطة IEnumerable وIQueryable مختلفة في بعض الحالات.

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