PDA

View Full Version : سوال: IQueryable یا IList



Mostafa_Dindar
پنج شنبه 03 تیر 1389, 13:18 عصر
سلام ,

من متدی دارم که یک سری رکورد رو Fetch کرده و به UI برای Bind کردن به کنترلهای داده میفرستد .

به نظر شما نوع خروجی بهتر است از نوع

IList<t> باشد یا از نوع
IQueryable<t> و چرا ؟

مرسی

sia_2007
پنج شنبه 03 تیر 1389, 15:32 عصر
زمانی از IQueryable استفاده میکنیم که بخوایم روش کوئری داینامیک با کارآیی خوب بگیریم.
برای Binding هم خوبه
IList رو تست نکردم؛ ولی فکر نمیکنم مشکلی داشته باشه.
به هر حال خروجی Entity Framework ؛ IQueryable هستش و دلیلی به انجام تبدیل نمیبینم.

Behrouz_Rad
پنج شنبه 03 تیر 1389, 15:55 عصر
اگر از LINQ to Objects یا LINQ to XML استفاده می کنی خروجی رو برابر با IList قرار بده. در غیر اینصورت خروجی بهتره که IQueryable باشه... در این حالت می تونی روی خروجی دوباره یک کوئری بزنی یا نتیجش رو به طور موقت ذخیره و در دستورات بعد کوئری بزنی.

موفق باشید.

Mostafa_Dindar
پنج شنبه 03 تیر 1389, 21:41 عصر
اگر از LINQ to Objects یا LINQ to XML استفاده می کنی خروجی رو برابر با IList قرار بده. در غیر اینصورت خروجی بهتره که IQueryable باشه... در این حالت می تونی روی خروجی دوباره یک کوئری بزنی یا نتیجش رو به طور موقت ذخیره و در دستورات بعد کوئری بزنی.

موفق باشید.


مرسی , منظورتون از این حرف همون deferred execution هست ؟ آیا در صورتی که تنها بخوام داده ها رو به کنترل های داده در UI بایند کنم باز هم IQueryable بهتره ؟ چون در جاهای دیگه اینطور نگفتند .

سوال دیگر اینکه , چرا در صورتی که بخوام از LINQ To Object یا LINQ To XML استفاده کنم IList بهتره ؟ به طور کلی در من در درک و تشخیص مکان استفاده از IQueryable , IEnumerable و IList مشکل دارم . اگر در این مورد یه توضیح مختصر بدین ممنون میشم .

مرسی

Behrouz_Rad
پنج شنبه 03 تیر 1389, 22:50 عصر
منظورتون از این حرف همون deferred execution هست ؟ آیا در صورتی که تنها بخوام داده ها رو به کنترل های داده در UI بایند کنم باز هم IQueryable بهتره ؟ چون در جاهای دیگه اینطور نگفتند .

بله منظور همان Deferred Execution هست.
چون خروجی یک دستور LINQ to SQL ذاتاً از نوع <IQueryable<T هست، شما مجبوری که بلافاصله متد ToList رو فراخوانی کنی. این به شما اجازه نمیده که Deferred Execution داشته باشی.
در کل برای LINQ to SQL همیشه از IQueryable استفاده کن.


چرا در صورتی که بخوام از LINQ To Object یا LINQ To XML استفاده کنم IList بهتره ؟

IEnumerable و IList به وفور استفاده میشن چون ذات LINQ بر مبنای اونها هست. به جای IList بهتره از List استفاده کنی. List بهت اجازه تا علاوه بر Extension Methods که در LINQ وجود دارند، بتونی از اجزای کلاس List هم استفاده کنی. این تویی که با توجه به نیازت می تونی تصمیم بگیری که آیا متدهای LINQ واست کافی هستند و اینکه آیا متدی در List هست که معادلی در LINQ نداره و استفاده از اون راحت تر هست.
در کل به نظر من اگر قصد داری تا مقدار برگشتی داشته باشی از List استفاده کن و اگر از مقدار بازگشتی در خود متد استفاده می کنی از <IEnumerable<T.

موفق باشید.