PDA

View Full Version : طریقه ی کارکرد LINQ و DataSet ؟



nice_boy_a
دوشنبه 24 تیر 1392, 21:15 عصر
سلام.
DataSet میتونه جداول بانک رو تو خودش نگه داره و وقتی میخوایم select انجام بدیم، میتونیم Select رو توی DataSet اعمال کنیم.(یعنی نیازی به وصل شدن به لانک نیست)

LINQ کارش چه طوریه ؟ یعنی اگه ما Select توی LINQ بزنیم به بانک وصل میشه و اطلاعات رو میاره ؟یا اطلاعات رو مثل DataSet تو حافظه نگه میداره ؟

لطفا کامل توضیح بدین.
ممنون.

no0rin_66
دوشنبه 24 تیر 1392, 22:17 عصر
lazy load linq to sql در این باره تحقیق کنید

tooraj_azizi_1035
سه شنبه 25 تیر 1392, 13:11 عصر
به DataSet اصطلاحاً Local In-memory Cache Of Data گفته میشه. یعنی داده ها رو به طور محلی در حافظه برنامه نگه می داره.
کوئری های LINQ روی دیتاست اگه زده بشه (LINQ-to-DataSet) در این صورت هیچ درخواستی به سرور ارسال نمیشه اما در مورد LINQ-To-SQL اینطور نیست و دستورات به SQL Server ارسال و نتایج برگشت داده میشه.
و در مورد LINQ تا زمانی که نتایج رو Enumerate نکنید یعنی در حلقه foreach استفاده نکنید یا از اون Count نگیرید یا ToList یا ToArray یا ... کلاً هر عملی که نیاز به تحویل داده خروجی نباشه رو انجام ندید اجرا نمیشه یعنی خاصیت اجرای تعویقی داره (Deffered Execution).

nice_boy_a
سه شنبه 25 تیر 1392, 17:22 عصر
و در مورد LINQ تا زمانی که نتایج رو Enumerate نکنید یعنی در حلقه foreach استفاده نکنید یا از اون Count نگیرید یا ToList یا ToArray یا ... کلاً هر عملی که نیاز به تحویل داده خروجی نباشه رو انجام ندید اجرا نمیشه یعنی خاصیت اجرای تعویقی داره (Deffered Execution).

این خط رو متوجه نشدم! لطفا بیشتر توضیح بدین؟

tooraj_azizi_1035
سه شنبه 25 تیر 1392, 18:53 عصر
این کوئری رو ببین:

var query = from customer in db.Customers << Query does
where customer.City == "Paris" << not execute
select customer; << here


بلافاصله اجرا نمیشه زمانی که نتایج اون درخواست میشه اجرا میشه:


foreach (var Customer in query) << Query executes here
{
Console.WriteLine(Customer.CompanyName);
}


اما در این مورد بلافاصله اجرا میشه چون شما تعداد رو درخواست کردید:


var query = (from customer in db.Customers << Query executes here
where customer.City == "Paris"
select customer).Count();


توضیحات بیشتر آقای Charlie Calvert (http://blogs.msdn.com/b/charlie/):
http://blogs.msdn.com/b/charlie/archive/2007/12/09/deferred-execution.aspx