مزیت استفاده از IQueryable به عنوان نوع خروجی متد LINQ

پرووید

دسته های مقالات

فرض کنید متد زیر را در برنامه ی خود تعریف کرده اید که یک کالکشن از اشیا Customers را بر می گرداند.

 
Public Function GetPremiumCustomers() As List(of Customer)
Dim db As New dbContextObject
Return From c In db.Customers
Where c.IsPremium = True
Select c
End Function

مسئله این است که برنامه نویسان دیگر ممکن است نیاز داشته باشند که متد شما را به منظور انجام یک کار دیگر استفاده کنند:

 
res = (From c in GetPremiumCustomers()
Where c.City = "Regina"
Select c).ToList()

مشکل دستور بالا در این است که تمامی نمونه های (Instance) های شی Customer را بر می گرداند، در حالی که دستور مورد نظر فقط تعدادی از آنها (کسانی که در شهر Regina) ساکن هستند را نیاز دارد. همه ی ما می دانیم که خواندن رکوردهایی که به آنها نیازی نداریم، باعث کاهش سرعت بانک اطلاعاتی می شود. به نظر شما، اگر می توانستیم دستور LINQ ی که در بالا در متد GetPremiumCustomers بود را با دستور LINQ ی که در قسمت بالا تعریف شد را ترکیب می کردیم بهتر نبود؟ البته منظور ما این است که این ترکیب زمانی اتفاق بیفتد که دستورات SQL متناظر با این دستور LINQ تولید می شود.

خبر خوب این که در دات نت به راحتی می توان این ترکیب را انجام داد تا فقط مشتری های Premimum ساکن در Regina برگرداننده شوند. تنها کاری که نیاز است انجام دهید این است که نوع خروجی متد GetPremiumCustomers که در بالا تعریف کردید را از نوع اینترفیس IQueryable تعریف کنید:

 
Public Function GetPremiumCustomers() As IQueryable(of Customer)
Return From c In db.Customers
Where c.IsPremium = True
Select c

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *