اتصال منابع داده ای
بعضی مواقع قصد دارید که منابع دادهای مختلف را با هم ترکیب کنید و به عنوان یک نتیجه نشان دهید. البته این منابع دادهای باید به طریقی با یکدیگر مرتبط باشند. در LINQ ، با استفاده از عبارت join یا متد ()Join میتوان منابع دادهای مختلف را به یکدیگر وصل کرد، البته این منابع دادهای باید دارای خواصی باشند که بتوان آنها را از لحاظ مساوی بودن مقایسه کرد. با استفاده از عبارت join یا متد ()Join میتوان عملیات inner joins ،group joins و left outer joins را انجام داد. مفهوم join در Linq مشابه با join در زبان sql میباشد. اگر شما با مفهوم join در sql آشنایی دارید، این مفاهیم برای شما آشنا هستند. ممکن است عمل اتصال در Linq برای افراد تازه کار مشکل باشد، بنابراین بنده تلاش میکنم این مفهوم را به شکل بسیار ساده برای شما بیان کنم. در درس بعدی شما یاد میگیرید که چگونه عمل اتصال ( join ) را در Linq انجام دهید.
فرض کنید که یک جدول در بانک اطلاعاتی موجود است که لیست تمامی مؤلفها در آن ذخیره میشود. یک جدول دیگر در بانک اطلاعاتی وجود دارد که مشخصات کتابهای مختلف با شماره مولفی که آن را تألیف کرده است، در خود ذخیره میکند. نتیجه پرس و جویی که باعث شود دو جدول فوق به یکدیگر متصل شود، دارای رکوردهایی است که اطلاعات هر مؤلف و کتابی که تألیف کرده است را در خود دارد. به عنوان مثال یک رکورد ترکیبی میتواند شامل نام مؤلف و نام کتابی که تألیف کره است، باشد. برای اتصال دو منبع دادهای مختلف، هر منبع باید دارای خاصیتی باشد که با خاصیت منبع دیگر از لحاظ مساوی بودن مقایسه شود. شرط اصلی برای ترکیب دو رکورد این است که مقدار خاصیت آن دو رکورد با یکدیگر برابر باشد.
در مثال بالا، میتوان در هر دو جدول (مؤلف و کتاب) فیلدی به نام شماره مؤلف اضافه کرد. هر مؤلف در جدول Auhtors(مؤلفها) میتواند دارای یک شماره منحصر به فرد باشد، در حالی که هر کتاب در جدول Books(کتابها) میتواند دارای یک شماره مؤلف باشد، که مشخص میکند که چه کسی کتاب را تألیف کرده است. در هر عمل اتصال، یک منبع دادهی داخلی و یک منبع دادهی خارجی وجود دارد. منبع دادهی داخلی شامل رکوردهایی است که با منبع دادهی خارجی ترکیب میشود.
هر رکورد در منبع دادهی داخلی با یک رکورد نظیر خود را در منبع دادهی خارجی ترکیب میشود و یک رکورد جدید را ایجاد میکنند. در درسهای بعدی 3 نوع عمل اتصال را بررسی میکنیم. inner joins به شما این امکان را میدهد که دو منبع داده را به یکدیگر متصل کنید و یک نتیجه مشابه یک جدول را بدست آورید. در طول عمل inner join ، رکوردهای داخلی که یک رکورد خارجی نظیر ندارند در نتیحه پرس و جو قرار نمیگیرند. inner join سادهترین و آسانترین نوع join است. نوع دیگر عمل group join ،join است که یک مجموعه سلسله مراتبی از نتابج را تولید میکند. این نوع join، رکوردهایی که با یک رکورد از منبع دادهی دیگر ارتباط دارند در یک گروه قرار میدهد. به عنوان مثال تمامی کتابهای یک مؤلف خاص را در یک گروه قرار میدهد. نوع دیگر اتصال، left outer join است. این نوع اتصال همانند inner join یک نتیجه همانند جدول تولید میکند، با این تفاوت رکوردهای خارجی که معادلی در منبع داده داخلی ندارند بازهم در نتیجه پرس و جو قرار میگیرند. در درسهای بعدی توضیحات بیشتری در رابطه با انواع اتصال داده میشود.
به این نکته توجه کنید که اتصالات را میتوانید با استفاده از چندین عبارت from انجام دهید اما برای انجام این کار باید به درستی کلاسهای خود را طراحی کنید. به عنوان مثال کلاس مؤلف میتواند یک خاصیت به نام books داشته باشد که مجموعهای از کتابهای تألیفی مؤلف را در خود نگه دارد. عبارت Joined میتواند به صورت موثری حتی وقتی در بین کلاسها ارتباطی وجود ندارد به کار برده شود. برای این کار کافی است در هر دو کلاس کلیدی را تعریف کنیم که در طول عمل join از آن استفاده کنیم.