PDA

View Full Version : انتخاب جداول مرتبط در Linq



amirniknam
سه شنبه 29 مرداد 1387, 17:09 عصر
سلام
سريع ميرم سر اصل مطلب:
همونطور كه ميدونيد يكي از تفاوت هاي Linq to Object با Linq to SQL اين هست كه در اولي به محض آنكه شما كوئري مي نويسيد اجرا ميشه اما در دومي تا زمانيكه شما بازيابي اطلاعاتي انجام ندين كوئري شما در حكم يك Command هست يكي از روش هاي بازيابي داده استفاده از حلقه ها مثلا foreach هستش همين طور مي تونيد از ToArray يا ToList هم استفاده كنين بعد از اجراي اين فرمان ها (اين طور كه ميگن) داده ها از ديتا بيس فراخواني شده و ديگه شما با ديتا بيس كاري ندارين و داده هاتون توي حافظه قرار ميگيره

حالا سوال من در مورد جداول مرتبط به هم هست اگر شما از يك جدول كه داراي كليد خارجي هست داده اي رو بخونيد وقتي به دستور SQL توليد شده با Linq نگاه مي كنيد يه دستور Select ساده هستش بعد مي تونيد بادستور ToList داده ها رو بازيابي كنيد حالا نكته جالب اين جاست كه اگر نوع متغير Generic مربوط به داده ي ليست رو مشخص كنيد يعني بگيد مربوط به كدوم Entity هستش مي تونيد به دادهاي ديگر جدول مربوط به كليد خارجي دسترسي داشته باشين مثلاID2 كليد خارجي در جدول يك وكليد اصلي در جدول 2 هست شما از اين طريق ميتونيد به نام ID2 در جدول 2 دسترسي داشته باشين در حاليكه براي انجام اين كار حتما بايد كوئري كه با Linq مينويسين از Join استفاده بشه حالا مي خوام ببينم قضيه چيه؟ آيا براي هر بار فراخواني داده از جدول 2 باز برنامه به ديتابيس مراجعه ميكنه يا همه دادها رو يكجا ميخونه ؟
لطفا اگر كسي در مورد Linq سر رشته داره به من توضيح بده
ممنون

Zaparo
سه شنبه 29 مرداد 1387, 23:58 عصر
اولا" که اون چیزی که اول نوشتید یکم گنگ بود برام فکر کنم منظورتون Deferred versus Immediate Loading (LINQ to SQL)
باشه !

در مورد دوم هم بزار ببینم منظورت این بود که یه جدول A داری که در فیلد a_ با جدول B در فیلد a_ رابطه داره که a_ کلید اصلی جدول A هست
بعد میگی که فیلد c_ از جدول A رو بیار و میاره تا اینجا درست
بعد از متد ToList میگی که یه List از B به من بده ؟

این غلط و شدنی نیست , چه جوری اینکار رو کردی؟

چیزی که ما تا حالا دیدیم این بوده که Query که با #C مینویسی به SQL تبدیل میشه

احتمالا" شما به متد List جدول B رو دادید و اونهم فیلدهای B رو اورده که این طبیعی ربطی به LINQ نداره

میشه اینهایی که گفتید رو با یه مثل که کد هم داره بنویسید شاید من منظورتون رو اشتباه متوجه شدم!